Seite 1 von 1

[BUG 4.9.12] cCodeGenerator - Uncaught exception cInvalidArgumentException

Verfasst: Do 29. Jun 2017, 13:56
von Oldperl
Servus,

Bug in der Datei contenido/classes/code_generator/class.code.generator.standard.php!

Fehlermeldung im errorlog:
[29-Jun-2017 07:50:04 UTC] PHP Fatal error: Uncaught exception 'cInvalidArgumentException' with message 'The file /var/www/.../html/data/temp/code_gen_5954b12c25e37.php could not be accessed because it does not exist.' in /var/www/.../html/contenido/classes/class.filehandler.php:233
Stack trace:
#0 /var/www/.../html/contenido/classes/code_generator/class.code.generator.standard.php(141): cFileHandler::remove('/var/www/...')
#1 /var/www/.../html/contenido/classes/code_generator/class.code.generator.abstract.php(215): cCodeGeneratorStandard->_generate(true, false, NULL)
#2 /var/www/.../html/contenido/includes/functions.con2.php(57): cCodeGeneratorAbstract->generate(73, '1430', 1, 1, false, true, true, false, NULL)
#3 /var/www/.../html/contenido/includes/frontend/include.front_content.php(537): conGenerateCode(73, '1430', 1, 1)
#4 /var/www/.../html/cms/front_content.php(82): include('/var/www/...')
#5 {main}
thrown in /var/www/.../html/contenido/classes/class.filehandler.php on line 233
Der Grund liegt in der Methode _generate() des CodeGenerators. Dort wird ab Zeile 132 ff der Modul-Code mit Hilfe einer temporären Datei bereinigt. Dabei wird diese Datei im temp-Verzeichnis von Contenido erstellt, bearbeitet eingelesen und soll im Anschluss wieder gelöscht werden. Es wird zwar in einer if-Bedingung geprüft ob die Datei erstellt wurde, nur dann wird auch die Bearbeitung gemacht, jedoch wird auch wenn die Datei nicht erstellt wurde versucht, diese zu löschen. Bei nicht vorhandener temporärer Datei erfolgt daher ein entsprechender Eintrag im errorlog.

Code: Alles auswählen

// CON-1536 strip comments from module code
                // regex is not enough to correctly remove comments
                // use php_strip_whitespace instead of writing own parser
                // downside: php_strip_whitespace requires a file as parameter
                $tmpFile = dirname(cRegistry::getBackendPath()) . '/' . $cfg['path']['temp'] . uniqid('code_gen_') . '.php';
                if (cFileHandler::exists(dirname($tmpFile))
                    && cFileHandler::readable(dirname($tmpFile))
                    && cFileHandler::writeable(dirname($tmpFile))) {
                    if (false !== cFileHandler::write($tmpFile, $this->_moduleCode)) {
                        $this->_moduleCode = php_strip_whitespace($tmpFile);
                    }
                    // delete file
                    cFileHandler::remove($tmpFile);
                }
Abhilfe:
Am einfachsten ist es den Löschversuch nur bei erfolgreichem Schreiben der Datei zu machen, sprich, der remove-Befehl des DirHandlers sollte ebenfalls mit in die if-Abfrage rein.

Gruß aus Franken

Ortwin

Re: [BUG 4.9.12] cCodeGenerator - Uncaught exception cInvalidArgumentException

Verfasst: Do 29. Jun 2017, 14:25
von frederic.schneider_4fb
Hey Ortwin, leider war ich heute nicht lange im Hause, sonst hätte ich mich umgehend darum gekümmert. Ich setze das für nächste Woche auf die Tagesordnung. Du bekommst dann hier eine Rückmeldung. Danke schon einmal (inklusive für den Tipp, wie man es wahrscheinlich beheben kann)!

Re: [BUG 4.9.12] cCodeGenerator - Uncaught exception cInvalidArgumentException

Verfasst: Fr 30. Jun 2017, 06:41
von Oldperl
Servus Frederic,

kein Problem, immer ruhig bleiben. 8)
Ist jetzt kein so gravierender Bug, zumal er jetzt ja schon ziemlich lange existiert. Füllt halt nur wenn zutrifft das errorlog.

Also, schönes Wochenende zu Dir! :)

Gruß aus Franken

Ortwin

Re: [BUG 4.9.12] cCodeGenerator - Uncaught exception cInvalidArgumentException

Verfasst: Sa 1. Jul 2017, 09:29
von frederic.schneider_4fb
Danke, Dir auch ;)

Re: [BUG 4.9.12] cCodeGenerator - Uncaught exception cInvalidArgumentException

Verfasst: Do 13. Jul 2017, 09:08
von frederic.schneider_4fb
Guten Morgen,

ich habe Deinen Änderungsvorschlag inzwischen in den Core-Code übernommen. Danke nochmals!