[PyQt] pylupdate bug: infinite loop
Giovanni Bajo
rasky at develer.com
Mon Jun 18 15:39:08 BST 2007
Hi Phil,
I found a bug in pylupdate. Try feeding it with the following file:
crasher.py:
=====================
def foo():
"""
infinite loop trigger!
"""
=====================
and the following project file:
crasher.pro:
=====================
CODECFORSRC = UTF-8
CODECFORTR = UTF-8
SOURCES = crasher.py
=====================
pylupdate enters an infinite loop. By doing some debugging, I think it's
related to this while loop, in fetchtr.cpp:
if (!yyCodecForSource) {
[...]
} else {
QByteArray originalBytes;
while ( yyCh != EOF && yyCh != '\n' && yyCh != '"' && yyCh !=
'\\' ) {
if ( yyParsingUtf8 && yyCh >= 0x80 && !quiet) {
qWarning( "%s:%d: Non-ASCII character detected in
trUtf8 string",
(const char *) yyFileName, yyLineNo );
quiet = true;
}
originalBytes += (char)yyCh;
yyCh = getChar();
}
QString unicodeStr = yyCodecForSource->toUnicode(originalBytes);
QByteArray convertedBytes;
The while() loop is supposed to keep fetching bytes until it finds a
special character that needs to be handled differently. The problem is
that, within triple-quoted strings, '\n' is not a special character.
I tried fixing it (by guarding the \n check with a check to
singleQuote), but it didn't work out. I'm sure you know how to fix it.
(BTW: too bad you can't simply import ast/compiler and be done with the
lexer...)
--
Giovanni Bajo
More information about the PyQt
mailing list