Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
GoogleCodeExporter opened this issue Aug 28, 2015 · 7 comments
Closed

Comments

@GoogleCodeExporter
Copy link

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
Copy link
Author

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

  • Changed state: Accepted

Attachments:

@GoogleCodeExporter
Copy link
Author

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
Copy link
Author

My test file is fixed.  Thanks.

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

@GoogleCodeExporter
Copy link
Author

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

  • Changed state: Fixed

@GoogleCodeExporter
Copy link
Author

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
Copy link
Author

[deleted comment]

@GoogleCodeExporter
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants