Review Request 127488: Fix usage of std::isprint() function

Dominik Haumann dhaumann at kde.org
Sun Mar 27 18:21:04 UTC 2016


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/127488/
-----------------------------------------------------------

(Updated March 27, 2016, 6:21 p.m.)


Review request for KDE Frameworks.


Changes
-------

Add unit test (binary file of 120bytes missing, as reviewboard does somehow not accept it).


Bugs: 357341
    https://bugs.kde.org/show_bug.cgi?id=357341


Repository: kcodecs


Description
-------

With the patch in review request https://git.reviewboard.kde.org/r/127486/ I get another crash when loading the attached file in bug https://bugs.kde.org/show_bug.cgi?id=360797

The issue is the call if isprint(int): Accoring to http://en.cppreference.com/w/cpp/string/byte/isprint
"the behavior is undefined if the value of ch is not representable as unsigned char and is not equal to EOF."

In this case, casting the char to an int results "-31", which is clearly not representable as *unsigned* char. Hence, we indeed hit the "undefined behavior" and get a crash.

This patch therefore
- casts the char to an int first
- and then checks whether the int it non-negative
- only then, isprint() is called.


Diffs (updated)
-----

  autotests/kencodingprobertest.cpp 937bc13 
  src/probers/UnicodeGroupProber.cpp 1d86f08 

Diff: https://git.reviewboard.kde.org/r/127488/diff/


Testing
-------

Kate/Kwrite launch without crash.
Unit tests still pass.


Thanks,

Dominik Haumann

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20160327/44017b7d/attachment.html>


More information about the Kde-frameworks-devel mailing list