mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-22 01:29:43 +01:00
No description
2f217dad56
This fixes a segmentation fault caused by an out-of-bounds indexing caused by an attempt to unwordwrap a string that starts with two newlines. The problem here is that in the branch of the function string_unwordwrap() where `consecutive_newlines == 1`, the function does not check that the string `result` isn't empty before attempting to index `result.size()-1`. If `result` is empty, then `result.size()` is 0, and `result.size()-1` becomes -1, and indexing a string at position -1 is always undefined behavior. Funnily enough, a similar indexing happens just a few lines down, but this time, there is a check to make sure that the string isn't empty first. I'm unsure of how Dav999 forgot that check a few lines earlier. This situation can happen in practice, with custom level localizations. I made a level with a filename of testloc.vvvvvv and created a file at lang/fr/levels/testloc/custom_cutscenes.xml with the following content: <?xml version="1.0" encoding="UTF-8"?> <cutscenes> <cutscene id="test" explanation=""> <dialogue speaker="cyan" english="This is text..." translation="blarg"/> </cutscene> </cutscenes> Then I switched to French, created a script named `test`, and created a text box that started with two newlines (so in total, the text box must be at least 3 lines in length). Running the script triggers the segfault when the text box is created. (Well, technically, on my machine, it triggers an assertion fail in libstdc++ and aborts, but that's basically the same thing.) To fix this while still preserving the exact amount of newlines, if `result` is empty, we add a newline instead of attempting to index the string. |
||
---|---|---|
.github | ||
desktop_version | ||
mobile_version | ||
third_party | ||
tools | ||
.gitattributes | ||
.gitmodules | ||
License exceptions.md | ||
LICENSE.md | ||
logo.gif | ||
README.md |
This is the source code to VVVVVV, the 2010 indie game by Terry Cavanagh, with music by Magnus Pålsson. You can read the announcement of the source code release on Terry's blog!
The source code for the desktop version is in this folder.
VVVVVV is still commerically available at thelettervsixtim.es if you'd like to support it, but you are completely free to compile the game for your own personal use. If you're interested in distributing a compiled version of the game, see LICENSE.md for more information.
Discussion about VVVVVV updates mainly happens on the "unofficial" VVVVVV discord, in the vvvvvv-code
channel.
Credits
- Created by Terry Cavanagh
- Room Names by Bennett Foddy
- Music by Magnus Pålsson
- Metal Soundtrack by FamilyJules
- 2.0 Update (C++ Port) by Simon Roth
- 2.2 Update (SDL2/PhysicsFS/Steamworks port) by Ethan Lee
- Additional coding by Misa Kai
- Beta Testing by Sam Kaplan and Pauli Kohberger
- Ending Picture by Pauli Kohberger
- Localisations by our localisation teams
- With additional contributions by many others here on github <3