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

Bugfix for onion_websocket_vprintf and onion_websocket_write #276

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

YggdrasiI
Copy link
Contributor

Hello Mr. Moreno,

I've spotted a problem with 'onion_websocket_write'. This function will used it's argument 'va_list args' twice, but the pointer in the second call will be wrong.
I've found a similar function structure in 'onion_response_vprintf' and copied the solution (va_copy) given there.
The remove of '-1' in the first vsnprintf-call is also adapted from there.

The first commit of this pull request resolves the issue and the problem noted in #275.
The second commit just contains changes to trigger the bug with the example application websocket.c

Other double usages of va_list was not found in 'onion/src'.

Regards Olaf Schulz

This commit resolves two bugs:
1. Return value of onion_websocket_write was not correct in all cases.
2. onion_websocket_vprintf uses va_list-variable twice if internal buffer
	 is too small.  (Every variable argument list can only be used one time.)

   My changes are oriented to onion_response_vprintf, which already
   resolves the problem.

The next commit will contain a modification of the websocket-example
which triggers bug 2.
Without the previous commit the line

   onion_websocket_printf(ws, "Long string: %s", long_string)

will trigger access on uninitialised bytes. The va_list argument
points on the wrong position.

==241250== Syscall param write(buf) points to uninitialised byte(s)
==241250==    at 0x54AF2CF: __libc_write (write.c:26)
==241250==    by 0x54AF2CF: write (write.c:24)
==241250==    by 0x165F0759: onion_http_write (http.c:102)
==241250==    by 0x165F0F3D: onion_websocket_write (websocket.c:239)
==241250==    by 0x165F1386: onion_websocket_vprintf (websocket.c:334)
==241250==    by 0x165F1486: onion_websocket_printf (websocket.c:355)
@davidmoreno
Copy link
Owner

Hi,

thanks a lot. I had no time to review it yet. As soon as I review it I will tell you something.

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

Successfully merging this pull request may close these issues.

2 participants