-
Notifications
You must be signed in to change notification settings - Fork 376
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
bug: gcc resize_and_overwrite 導致髒數據的問題 #509
Comments
谢谢报告,稍晚看一下。 |
我们现在没有用到这个函数提供的sz啊 |
有测试代码?需要复现查问题。 |
问题是我们不会用到返回值 |
所以问题出在别的地方。 |
這時候的size預期設置爲25,但是實際上設置成了30,在後面使用memcpy沒有#0,導致多出來的内存可能被外面讀成髒數據。 |
實際上設置成了30-> 指的是string的容量? |
是的,string.size()是大於body_len的,但是後面沒有/0,所以外面可能讀出髒數據 |
你指的是string::size()大于body_len还是string::capacity()大于body_len |
我理解,代码期望的行为可能是, 1.body_len==25, size()==25, capacity()==30,然后data[25]=='\0',后面跟4个字节的脏数据。这是正常的。 如果出问题,可能是: |
是的這個行爲是正常的,但是在使用memcpy的時候僅拷貝了body_len爲25的字節,後面沒有\0,就變成了5個字節的髒數據。 |
|
所以是这三种情况的哪一种呢? |
1.body_len==25, size()==25, capacity()==30,然后data[25]=='\0',后面跟4个字节的脏数据。这是正常的。 |
|
能给个测试cinara的代码吗,先不纠结resize这里,我希望有个实际的例子能复现问题。@hoskylucky |
我懂了,等下会提一个pr fix |
https://godbolt.org/z/EefoE751z 我理解问题以及修复方案是这样的 |
用这个pr #512 |
這樣就沒問題了,感謝。 |
hi,我在使用cinatra的時候會遇到一些問題,在http read request的時候body會有髒數據,檢查了一下發現發生問題的地方出在details::resize中,gcc的resize_and_overwrite貌似會返回capacity,在stackoverflow中有討論,并且gcc bugzilla也有提到。
我使用的環境爲ubuntu 22.04 / gcc 13.2/ cinatra 0.8.3
感謝。
The text was updated successfully, but these errors were encountered: