Tokenize: Argumentlänge > 519 Zeichen = Setup-Crash?

Post Reply
measson
Posts: 175
Joined: 05. Oct 2012, 12:32
Contact:

Tokenize: Argumentlänge > 519 Zeichen = Setup-Crash?

Post by measson » 11. Jun 2014, 11:20

Offenbar verträgt die Funktion Tokenize nur Argumente mit maximal 519 Zeichen. Ist das Argument länger, stürzt die Setup.exe ab.
Ich brauche die Funktion in einem Paket zum Bereinigen der PATH-Variable, und die ist auf meinem Testrechner länger als 519 Zeichen. So bin ich darauf gestoßen

Ist das ein bekannter Bug :?:

Test-Case:
Client OS: Win 7 x64
Produktversion: 15.1
Setup.exe Dateiversion 15.1.0.929

Funzt:

Code: Select all

[Environment]
PATH=C:\Program Files (x86)\Business Objects\Common\3.5\bin\NOTES\;C:\Program Files (x86)\Business Objects\Common\3.5\bin\NOTES\DATA\;C:\Oracle\12.1.0\client;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Oracle\12.1.0\client\bin;C:\Windows\SysWOW64\Empirum;C:\Program Files (x86)\Infor\InforCOM\InstantClient;C:\plm\tcvis83\Products\Mockup\ClearanceDB;ab
NumberOfTokens=Tokenize (PATH, ";")
Führt zu Absturz der Setup.exe

Code: Select all

[Environment]
PATH=C:\Program Files (x86)\Business Objects\Common\3.5\bin\NOTES\;C:\Program Files (x86)\Business Objects\Common\3.5\bin\NOTES\DATA\;C:\Oracle\12.1.0\client;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Oracle\12.1.0\client\bin;C:\Windows\SysWOW64\Empirum;C:\Program Files (x86)\Infor\InforCOM\InstantClient;C:\plm\tcvis83\Products\Mockup\ClearanceDB;abc
NumberOfTokens=Tokenize (PATH, ";")

User avatar
Hendrik_Ambrosius
Moderator
Moderator
Posts: 8098
Joined: 13. Dec 2004, 23:10
Location: Adendorf/Lüneburg

Re: Tokenize: Argumentlänge > 519 Zeichen = Setup-Crash?

Post by Hendrik_Ambrosius » 11. Jun 2014, 14:18

Um das zu klären legen Sie bitte eine Störung beim Matrix42 Support an.
Vielleicht kann man vorher den String mit MID, LEFT und RIGHT als Workaround kürzen bzw. in 2 Schritten verarbeiten?
Hendrik Ambrosius / Senior Presales Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 GmbH | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 or of the support team.

measson
Posts: 175
Joined: 05. Oct 2012, 12:32
Contact:

Re: Tokenize: Argumentlänge > 519 Zeichen = Setup-Crash?

Post by measson » 11. Jun 2014, 15:43

Nach weiterem Testen habe ich festgestellt,
dass

a) schon bei einer Stringlänge > 255 keine korrekte Funktion mehr gegeben ist. Alle ermittelten Teilstrings sind leer, die Anzahl der Tokens aber korrekt.
Beispielcode

Code: Select all

[Set:Product]
set PathSeparator=;
set Farben=rotrotrotrotrotrotrotrotrotrotrotrotrotrotrotrotrotrotrotrot;grüngrüngrüngrüngrüngrüngrüngrüngrüngrüngrüngrüngrüngrüngrün;blaublaublaublaublaublaublaublaublaublaubla;weiß;gelb gelb gelb gelb gelb gelb gelb gelb gelb gelb gelb gelb gelb gelb gelb gelb gelb
set NumberOfTokens=Tokenize(Farben,%PathSeparator%) 
For Counter,1,%NumberOfTokens%,1,UpSection

[UpSection]
Set Name=%%Farben%Counter%% 
ReplaceEnv Name
SET TOTALLENGHT=Len(%Farben%)
SET NAMELENGHT=Len(%Name%)
Echo Farbe %Counter%: %Name% (%NAMELENGHT% von %TOTALLENGHT%)
b) ein Absturz der Setup.exe auftritt, wenn der Wert der Variable aus der Registry gelesen wurde und mehr als 519 Zeichen hat
Beispielcode

Code: Select all

[FixPathVar]
SET CurrentPathVar=%HKLM, SYSTEM\CurrentControlSet\Control\Session Manager\Environment, PATH%
SET TOTALLENGHT=Len(%CurrentPathVar%)
IF Len ("%CurrentPathVar%") < 520 THEN "StringToShort" ENDIF
SET NumberOfTokens=Tokenize (CurrentPathVar, ";")
ECHO Number of Tokens: %NumberOfTokens%, Part1: %CurrentPathVar1%
FOR Counter, 1, %NumberOfTokens%, 1, PathStringCheck

[PathStringCheck]
SET PathPart=%%CurrentPathVar%Counter%%
ReplaceEnv PathPart
SET NAMELENGHT=Len(%PathPart%)
ECHO PathPart %Counter%: %PathPart% (%NAMELENGHT% von %TOTALLENGHT%)


[StringToShort]
echo Make sure the Path variable is longer than 519 characters to reproduce the error! It's only %TOTALLENGHT% characters long
Abort
Könnte evtl mal jemand testen ob der Fehler auch in anderen Umgebungen so reproduzierbar ist?

Ticket habe ich aufgemacht (T90102)

measson
Posts: 175
Joined: 05. Oct 2012, 12:32
Contact:

Re: Tokenize: Argumentlänge > 519 Zeichen = Setup-Crash?

Post by measson » 11. Jun 2014, 17:12

Ok, hat sich erledigt. Works as designed. Die Länge ist tatsächlich auf 255 beschränkt. :roll:

Post Reply

Return to “Paketierung”

Who is online

Users browsing this forum: No registered users and 3 guests