Skip to content

Commit ab9945c

Browse files
committed
Avoid using fscanf to detect RGBDS object files
This function is made for text, e.g. accepts spaces, leading zeros, etc. before `%u`. This way checks that the correct amount of bytes are read instead.
1 parent 18e4f13 commit ab9945c

File tree

3 files changed

+8
-14
lines changed

3 files changed

+8
-14
lines changed

include/linkdefs.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@
1313
#include <stdbool.h>
1414
#include <stdint.h>
1515

16-
#define RGBDS_OBJECT_VERSION_STRING "RGB%1u"
17-
#define RGBDS_OBJECT_VERSION_NUMBER 9U
16+
#define RGBDS_OBJECT_VERSION_STRING "RGB9"
1817
#define RGBDS_OBJECT_REV 9U
1918

2019
enum AssertionType {

src/asm/output.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ void out_WriteObject(void)
532532
/* Also write symbols that weren't written above */
533533
sym_ForEach(registerUnregisteredSymbol, NULL);
534534

535-
fprintf(f, RGBDS_OBJECT_VERSION_STRING, RGBDS_OBJECT_VERSION_NUMBER);
535+
fprintf(f, RGBDS_OBJECT_VERSION_STRING);
536536
putlong(RGBDS_OBJECT_REV, f);
537537

538538
putlong(nbSymbols, f);

src/link/object.c

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -500,20 +500,15 @@ void obj_ReadFile(char const *fileName, unsigned int fileID)
500500
return;
501501
}
502502

503-
/* Begin by reading the magic bytes and version number */
504-
unsigned versionNumber;
505-
int matchedElems = fscanf(file, RGBDS_OBJECT_VERSION_STRING,
506-
&versionNumber);
503+
/* Begin by reading the magic bytes */
504+
int matchedElems;
507505

508-
if (matchedElems != 1)
506+
if (fscanf(file, RGBDS_OBJECT_VERSION_STRING "%n", &matchedElems) == 1
507+
&& matchedElems != strlen(RGBDS_OBJECT_VERSION_STRING))
509508
errx("\"%s\" is not a RGBDS object file", fileName);
510509

511-
verbosePrint("Reading object file %s, version %u\n",
512-
fileName, versionNumber);
513-
514-
if (versionNumber != RGBDS_OBJECT_VERSION_NUMBER)
515-
errx("\"%s\" is an incompatible version %u object file",
516-
fileName, versionNumber);
510+
verbosePrint("Reading object file %s\n",
511+
fileName);
517512

518513
uint32_t revNum;
519514

0 commit comments

Comments
 (0)