Q…/Free: Bug in QProcess writeToStdin

All right, this post is just to stop somebody else’s suffering in figuring out why writing to stdin in QProcess on Version 3.3.x-8 of Q…/Free doesn’t work on Windows. Well, actually it works but just for the first line you write to stdin. There is a bug in qprocess.cpp at line 730:

  1. void QProcess::writeToStdin( const QString& buf )  
  2. {  
  3.     QByteArray tmp = buf.local8Bit();  
  4.     tmp.resize( tmp.size() - 1 ); // drop the implicit \0  
  5.     writeToStdin( tmp );  
  6. }  

should be:

  1. void QProcess::writeToStdin( const QString& buf )  
  2. {  
  3.     QByteArray tmp = buf.local8Bit();  
  4.     tmp.resize( buf.length() );  
  5.     writeToStdin( tmp );  
  6. }  

Verision 3.3.7-7 includes the latter method, same as the latest Qt 4.3 sources. So, it’s actually a regression in 3.3.x-8. If you require the latest Qt 3 / Q…/Free for your open source application and need to write to some other processes’ stdin, you can just use a wrapper workaround that uses the latter method and directly uses writeToStdin( const QByteArray& buf ) instead of the QString variant.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.