Rovango / cefpython

Automatically exported from code.google.com/p/cefpython
0 stars 0 forks source link

Passing empty string from JS to Python, returns garbage vaule #7

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
What steps will reproduce the problem?
1. Send empty string from JS to Python.
2.
3.

What is the expected output? What do you see instead?
In python I get a garbage value, instead of the empty string that was passed.

What version of the product are you using? On what operating system?
cefPython 0.33 running Python 2.7 on Windows 7

Please provide any additional information below.

Original issue reported on code.google.com by rich...@gmail.com on 19 Aug 2012 at 8:53

GoogleCodeExporter commented 8 years ago
Attaching test files.
On Windows XP it works fine.
The problem appears only on Windows 7 for these test files.

Original comment by czarek.t...@gmail.com on 19 Aug 2012 at 9:18

Attachments:

GoogleCodeExporter commented 8 years ago
I think I've fixed it, but need confirmation, I use XP and cannot reproduce the 
bug.

Download cefpython.pyd from the repository and test it:
http://cefpython.googlecode.com/git/cefexample/cefpython.pyd

Original comment by czarek.t...@gmail.com on 19 Aug 2012 at 9:47

GoogleCodeExporter commented 8 years ago
My test file is fixed.  Thanks.

Original comment by rich...@gmail.com on 19 Aug 2012 at 10:51

GoogleCodeExporter commented 8 years ago
The problem with garbage data was in a function that converted CEFString to 
Python string (CefStringToPyString in utils.pyx), it took the C string (a 
pointer to wchar_t) from CEFString, and then converted it into char. To make 
the conversion a WideCharToMultiByte() function was used, but there is one 
quirk about this function. You call this func twice, first time to calculate 
the bytes that need to be copied. When string is non-empty it returns the bytes 
including the NUL character, so if string is 4 bytes it returns 5 bytes so that 
NUL (\0) is also copied. But when string is empty it returns 0 bytes. When you 
combine it with use of malloc() then you get garbage data, because malloc does 
not initialize the memory, and WideCharToMultiByte does not copy the NUL 
character when string is empty. The solution is to use calloc()  instead of 
malloc(), calloc initializes the memory with zeros.

This fix will make it into next 0.34 release.

Original comment by czarek.t...@gmail.com on 20 Aug 2012 at 8:22

GoogleCodeExporter commented 8 years ago
Version 0.35 released, comes with a fix for this issue.

Original comment by czarek.t...@gmail.com on 23 Aug 2012 at 8:28

GoogleCodeExporter commented 8 years ago
[deleted comment]
GoogleCodeExporter commented 8 years ago
Project will move to Github. Find this issue at the new address (soon): 
https://github.com/cztomczak/cefpython/issues/7

Original comment by czarek.t...@gmail.com on 24 Aug 2015 at 6:23