{
char id[64];
char ref[64];
- char type;
+
+ /**
+ * In the original file, using char type (without signed or unsigned) can be interpreted
+ * as 'unsigned char' in some build environments, like ARM architecture.
+ * To prevent the unexpected behavior, we replace 'char type' with 'signed char type' here.
+ */
+ signed char type;
union {
NSVGlinearData linear;
NSVGradialData radial;
};
char spread;
- char units;
+
+ /**
+ * In the original file, using char type (without signed or unsigned) can be interpreted
+ * as 'unsigned char' in some build environments, like ARM architecture.
+ * To prevent the unexpected behavior, we replace 'char units' with 'signed char units' here.
+ */
+ signed char units;
float xform[6];
int nstops;
NSVGgradientStop* stops;
return NULL;
}
-static NSVGgradient* nsvg__createGradient(NSVGparser* p, const char* id, const float* localBounds, char* paintType)
+/**
+ * In the original file, using char type (without signed or unsigned) can be interpreted
+ * as 'unsigned char' in some build environments, like ARM architecture.
+ * To prevent the unexpected behavior, we replace 'char paintType' with 'signed char paintType' here.
+ */
+static NSVGgradient* nsvg__createGradient(NSVGparser* p, const char* id, const float* localBounds, signed char* paintType)
{
NSVGattrib* attr = nsvg__getAttr(p);
NSVGgradientData* data = NULL;
{
NSVGcoordinate coord = {0, NSVG_UNITS_USER};
char units[32]="";
- sscanf(str, "%f%s", &coord.value, units);
+
+ /**
+ * In the original file, the formatted data reading did not specify the string with width limitation.
+ * To prevent the possible overflow, we replace '%s' with '%32s' here.
+ */
+ sscanf(str, "%f%32s", &coord.value, units);
coord.units = nsvg__parseUnits(units);
return coord;
}