Modify

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 Timm, 3 years ago

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	{}	{}

comment:2 by Timm, 3 years ago

Grad beim testen herausbekommen, dass der Fehler mit Php 8.1 nicht mehr auftritt.

comment:3 by noRiddle, 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

comment:4 by Gerhard Waldemair, 3 years ago

Resolution: fixed
Status: newclosed

In 14752:

fix #2320 - check banners url

Modify Ticket

Action
as closed The owner will remain somebody.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.