Erstellt vor 3 Jahren

Geschlossen vor 2 Jahren

#1926 closed Fehler (fixed)

Zufälliger Dateiname für PDF Spooldateien

Erstellt von: grichardson@… Verantwortlicher: m.bunkus@…
Priorität: normal Meilenstein: 3.0.0
Komponente: kivitendo ERP Version: 2.7.0
Schweregrad: normal Stichworte:
Beobachter:

Beschreibung (zuletzt geändert von m.bunkus@…)

Ähnlicher Fall wie Bug #1747, aber nicht für die .tex sondern die .pdf Datei.
Wenn man in die Warteschlange (queue) druckt landet die Datei in spool/ und der Dateiname wird in status gespeichert. Dateiname ist unix time + PID
Wenn in der gleichen Sekunde 2 PDFs erstellt werden, was bei einem Massendruck von mir vorkommt, wird eine der PDFs überschrieben.

Der betreffende Code ist in bin/mozilla/io.pl in sub print_form

if ($form->{media} eq 'queue') {

my %queued = map { s|.*/
} split / /, $form->{queued};

my $filename;
if ($filename = $queued{ $form->{formname} }) {

$form->{queued} =~ s/\Q$form->{formname} $filename\E;
unlink $::lx_office_conf{paths}->{spool} . "/$filename";
$filename =~ s/\..*$
g;

} else {

$filename = time;
$filename .= $$;

}

Ich habe keine Ahnung, ob die erste Bedingung des IFs jemals erfüllt wird.

Wenn es keine Einwände gibt würde ich die gleiche Lösung wie in für Bug 1747 nehmen.

Änderungshistorie (7)

comment:1 Geändert vor 3 Jahren durch m.bunkus@…

  • Beschreibung geändert (Diff)

comment:2 Geändert vor 3 Jahren durch m.bunkus@…

  • Status von new nach assigned geändert
  • Verantwortlicher von m.bunkus@… nach grichardson@… geändert

Tu es.

comment:3 Geändert vor 3 Jahren durch grichardson@…

Ich hab nochmal geschaut, macht die Tempfile-Lösung hier denn Sinn, es ist ja gerade keine temporäre Datei, sondern sie bleibt so lange erhalten, bis der Benutzer sie an der Oberfläche im Druckmenü löscht.
Meine erste Idee ist mal wieder ein int(rand(256)) dranzuhängen, oder man könnte überprüfen, ob es schon eine Datei mit dem Namen gibt und nur dann zufällig erweitern. Oder ist Tempfile trotzdem OK?

comment:4 Geändert vor 3 Jahren durch m.bunkus@…

Der Name der temporären Datei wird in der Datenbank gespeichert (andernfalls würde ja auch der bisherige Dateiname nicht rekonstruierbar sein). Zufällig darf er also sein.

Deine Frage meint bestimmt die direkte Verwendung der Funktion File::Temp::tempfile, oder? Klar ergibt die Sinn, sie darf die Datei nur nicht direkt löschen. Das ist trivial über den Parameter UNLINK => 0 zu erledigen.

comment:5 Geändert vor 2 Jahren durch m.bunkus@…

  • Meilenstein auf 3.0.0 gesetzt

comment:6 Geändert vor 2 Jahren durch m.bunkus@…

  • Status von assigned nach accepted geändert
  • Verantwortlicher von grichardson@… nach m.bunkus@… geändert

comment:7 Geändert vor 2 Jahren durch m.bunkus@…

  • Lösung auf fixed gesetzt
  • Status von accepted nach closed geändert

In 5d0aec66f1d31f99c14944f6405c7fb712f99756/erp:

Spoolen: Spool-Dateien nach Erzeugen des temp. Namens nicht direkt wieder löschen

Fixt #1926.

Hinweis: Hilfe zur Verwendung von Tickets finden Sie in TracTickets.