From aa8d593959026d295ce08559071c11fd39600d54 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Mon, 8 Aug 2011 22:46:53 +0100 Subject: [PATCH] make sure the character position exists before reading it --- generators/comicbook/qnatsort.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/generators/comicbook/qnatsort.cpp b/generators/comicbook/qnatsort.cpp index 4002c0549..5ea8ae536 100644 --- a/generators/comicbook/qnatsort.cpp +++ b/generators/comicbook/qnatsort.cpp @@ -32,7 +32,13 @@ static int compare_right( const QString &leftStr, int left, const QString &right * remember it in BIAS. */ for ( ;; left++, right++ ) { - if ( !leftStr[ left ].isDigit() && !rightStr[ right ].isDigit() ) + if ( left >= leftStr.length() && right < rightStr.length() ) + return -1; + else if ( right >= rightStr.length() && left < leftStr.length() ) + return +1; + else if ( right >= rightStr.length() && left >= leftStr.length() ) + return bias; + else if ( !leftStr[ left ].isDigit() && !rightStr[ right ].isDigit() ) return bias; else if ( !leftStr[ left ].isDigit() ) return -1; @@ -58,7 +64,13 @@ static int compare_left( const QString &leftStr, int left, const QString &rightS * different value wins. */ for ( ;; left++, right++ ) { - if ( !leftStr[ left ].isDigit() && !rightStr[ right ].isDigit() ) + if ( left >= leftStr.length() && right < rightStr.length() ) + return -1; + else if ( right >= rightStr.length() && left < leftStr.length() ) + return +1; + else if ( right >= rightStr.length() && left >= leftStr.length() ) + return 0; + else if ( !leftStr[ left ].isDigit() && !rightStr[ right ].isDigit() ) return 0; else if ( !leftStr[ left ].isDigit() ) return -1;