pawn-lang/sa-mp-fixes

_FIXES_ConstMod issue

zsoolt997 opened this issue · 1 comments

Problem

Using either TextDrawSetString or PlayerTextDrawSetString adds a random character to end of the string which was passed through the function. Or just creating a textdraw.

MCVE

With TextDrawCreate:

#include <a_samp>

#include <fixes>

static Text:gs_TestTexdtraw;

main() {
    new textdrawText[] = "Some text";

    printf("%s", textdrawText);

    gs_TestTexdtraw = TextDrawCreate(582.588073, 426.999969, textdrawText);
    TextDrawLetterSize(gs_TestTexdtraw, 0.449999, 1.600000);
    TextDrawAlignment(gs_TestTexdtraw, 1);
    TextDrawColor(gs_TestTexdtraw, -5963521);
    TextDrawSetShadow(gs_TestTexdtraw, 0);
    TextDrawSetOutline(gs_TestTexdtraw, 1);
    TextDrawBackgroundColor(gs_TestTexdtraw, 51);
    TextDrawFont(gs_TestTexdtraw, 1);
    TextDrawSetProportional(gs_TestTexdtraw, 1);

    printf("%s", textdrawText);
}

Prints out this:

Some text
Some text0@►

With TextDrawSetString:

#include <a_samp>

#include <fixes>

static Text:gs_TestTexdtraw;

main() {
    gs_TestTexdtraw = TextDrawCreate(582.588073, 426.999969, "Test text");
    TextDrawLetterSize(gs_TestTexdtraw, 0.449999, 1.600000);
    TextDrawAlignment(gs_TestTexdtraw, 1);
    TextDrawColor(gs_TestTexdtraw, -5963521);
    TextDrawSetShadow(gs_TestTexdtraw, 0);
    TextDrawSetOutline(gs_TestTexdtraw, 1);
    TextDrawBackgroundColor(gs_TestTexdtraw, 51);
    TextDrawFont(gs_TestTexdtraw, 1);
    TextDrawSetProportional(gs_TestTexdtraw, 1);

    new replaceText[] = "Some new text";

    printf("%s", replaceText);
    TextDrawSetString(gs_TestTexdtraw, replaceText);
    printf("%s", replaceText);
}

Prints out this:

Some new text
Some new texthx►

If you disable these fixes with

#define FIX_CreatePlayerTextDraw				(0)
#define FIX_CreatePlayerTextDraw_2				(0)
#define FIX_PlayerTextDrawSetString				(0)
#define FIX_PlayerTextDrawSetString_2			(0)
#define FIX_TextDrawCreate						(0)
#define FIX_TextDrawCreate_2					(0)
#define FIX_TextDrawSetString					(0)
#define FIX_TextDrawSetString_2					(0)

works fine.

More information

Using this commit (450b41e), works fine. This helped me to find where is the problem, but took me a good 2-3 hours to figure it out.

Fixed.