Erstellt vor 3 Jahren
Geschlossen vor 3 Jahren
#1747 closed Fehler (fixed)
Name der temporären Druckdateien nicht "zufällig" genug
| Erstellt von: | grichardson@… | Verantwortlicher: | m.bunkus@… |
|---|---|---|---|
| Priorität: | normal | Meilenstein: | |
| Komponente: | kivitendo ERP | Version: | 2.7.0 unstable |
| Schweregrad: | Verbesserung | Stichworte: | Systemeinstellungen |
| Beobachter: | information@… |
Beschreibung
Derzeit wird der Dateiname der temporären Dateien beim PDF Druck ja über einen Timestamp generiert, der sekundengenau ist:
in der Form.pm:
my $fileid = time;
$self->{tmpfile} = "${fileid}.$self->{IN}";
Das gibt dann Dateinamen wie 1322660130.invoice.tex
Wenn ich aber einen Massendruck starte, wo fast alle 2 Sekunden eine PDF erstellt wird, und dabei Benutzer an der Oberfläche weiterarbeiten, ist es gar nicht so unwahrscheinlich, daß mal innerhalb einer Sekunde 2 Druckaufträge angefragt werden, die zum gleichen temporären Dateinamen führen, worauf einer der beiden Druckbefehle versagt.
Ein Variante wäre z.B. den Timestamp um eine Zufallszahl zu erweitern, z.B.
my $fileid = time . "_" . int(rand(256));
Das sollte wahrscheinlich reichen, aber gibt es andere Vorschläge oder Einwände?
Änderungshistorie (2)
comment:1 Geändert vor 3 Jahren durch information@…
- Beobachter information@… hinzugefügt
comment:2 Geändert vor 3 Jahren durch m.bunkus@…
- Lösung auf fixed gesetzt
- Status von new nach closed geändert
Ist in Revision b3b1b69 behoben.

Ich find den mkstemp-Ansatz von Eike gut, deswegen halte ich hier kurz die E-Mail von der devel-Liste fest, damit die Info nicht verloren geht:
Entweder die Thread-ID des Threads, der da gerade läuft, oder man nimmt ein
API das genau für diesen Zweck gemacht wurde: mkstemp().
S.a.:
http://perl.active-venture.com/lib/File/Temp.html