Opened 3 years ago
Closed 3 years ago
#2320 closed Bug/Fehler (fixed)
strpos(): Empty needle in File: /inc/xtc_get_banners_url.inc.php on Line: 50
| Reported by: | web-looks.de | Owned by: | somebody |
|---|---|---|---|
| Priority: | normal | Milestone: | modified-shop-2.0.8.0 |
| Component: | Shop | Version: | 2.0.7.2 |
| Keywords: | Cc: | ||
| Blocked By: | Blocking: |
Description
Vorschlag zur Korrektur:
/inc/xtc_get_banners_url.inc.php
Suchen nach:
if (strpos(HTTP_SERVER, $shop_url['domain']) !== false) {
Ersetzen mit:
if (!empty($shop_url['domain'])
&& strpos(HTTP_SERVER, $shop_url['domain']) !== false
) {
Attachments (0)
Change History (4)
comment:1 by , 3 years ago
comment:2 by , 3 years ago
Grad beim testen herausbekommen, dass der Fehler mit Php 8.1 nicht mehr auftritt.
comment:3 by , 3 years ago
In Bezug auf Timm:
Ich denke, daß man das nicht so ohne weiteres sagen kann.
Man müsste den genauen Fall kennen wo es mit PHP 7.4.32 auftrat.
Oder anders gesagt:
Es muß herausgefunden werden, ob $shop_url['domain'] u.U. leer sein könnte.
Offensichtlich kann es das und das muß imo abgefangen werden.
Ein simpler Test:
$test_str = 'aabbccdd'; $test_needle = ''; var_dump(strpos($test_str, $test_needle));
ergibt auf PHP 8.1.12 (Zend: 4.1.12) das: int(0)
was nicht gut ist, denn wenn es nicht false ergibt, weil ein leerer String ja nicht in 'aabbccdd' enthalten ist, kann es zu unvorhergesehenen Ergebnissen führen.
Es dürfte sich um ein ähnliches Problem wie hier dargestellt handeln: Seltsames PHP-Problem bzgl. typen-sicherem Vergleich | Antwort #2
Ich vermute aufgrund dieser Worte aus dem PHP-Manual
"
Wenn der Parameter needle keine Zeichenkette ist, wird er vor PHP 8.0.0 in eine Ganzzahl umgewandelt und als ordinaler Wert eines Zeichens betrachtet. Dieses Verhalten gilt seit PHP 7.3.0 als veraltet und es wird dringend empfohlen, sich nicht darauf zu verlassen. Ist das Verhalten gewünscht, so sollte needle explizit in eine Zeichenkette umgewandelt werden oder explizit die Funktion chr() aufgerufen werden.
"
daß eine leere Zeichenkette als chr(0) interpretiert wird was zu NULL aufgelöst wird.
Gruß,
noRiddle

Gleichen Fehler hab ich in Shopversion 2.0.7.2 mit PHP 7.4.32 allerdings erst seit 21.11.2022. Dafür aber extrem oft, weil ich viele Banner auf der Startseite für meine Kategorien habe. Da an der Seite aber nicht wirklich etwas geändert wurde gehe ich davon aus, dass die PHP Version bei mir von 7.4.31 auf 7.4.32 angehoben wurde und dadurch der Fehler erst auftritt.
[2022-11-24 14:48:22] [warning] [modified] [pid:9158] WARNING found for URL: / {} {} [2022-11-24 14:48:22] [warning] [modified] [pid:9158] strpos(): Empty needle in File: /inc/xtc_get_banners_url.inc.php on Line: 50 {} {} [2022-11-24 14:48:22] [warning] [modified] [pid:9158] Backtrace #0 - /inc/xtc_display_banner.inc.php called at Line 50 {} {} [2022-11-24 14:48:22] [warning] [modified] [pid:9158] Backtrace #1 - /includes/extra/header/header_body/banners.php called at Line 42 {} {} [2022-11-24 14:48:22] [warning] [modified] [pid:9158] Backtrace #2 - /includes/header.php called at Line 183 {} {} [2022-11-24 14:48:22] [warning] [modified] [pid:9158] Backtrace #3 - /index.php called at Line 35 {} {}