pawn-lang / sa-mp-fixes

Includes and plugins to fix various issues in the SA:MP server that can be fixed externally, leaving the devs time for other things.
135 stars 57 forks source link

_FIXES_ConstMod issue #157

Closed zsoolt997 closed 2 years ago

zsoolt997 commented 2 years ago

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 (450b41ee76cc852872cdf80cd7e43feff74df2cc), works fine. This helped me to find where is the problem, but took me a good 2-3 hours to figure it out.

Y-Less commented 2 years ago

Fixed.