Skip to content

Commit 74ab0a6

Browse files
committed
Use exact types for Py_BuildValue.
IIRC, most ABI upcast values passed to vararg functions anyway, but there might be some other ABIs that require the exact correct type.
1 parent 81075b5 commit 74ab0a6

File tree

2 files changed

+60
-57
lines changed

2 files changed

+60
-57
lines changed

src/ft2font.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ extern "C" {
1818
/*
1919
By definition, FT_FIXED as 2 16bit values stored in a single long.
2020
*/
21-
#define FIXED_MAJOR(val) (long)((val & 0xffff000) >> 16)
22-
#define FIXED_MINOR(val) (long)(val & 0xffff)
21+
#define FIXED_MAJOR(val) (unsigned short)((val & 0xffff000) >> 16)
22+
#define FIXED_MINOR(val) (unsigned short)(val & 0xffff)
2323

2424
// the FreeType string rendered into a width, height buffer
2525
class FT2Image

src/ft2font_wrapper.cpp

Lines changed: 58 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ static void PyGlyph_dealloc(PyGlyph *self)
276276
static PyObject *PyGlyph_get_bbox(PyGlyph *self, void *closure)
277277
{
278278
return Py_BuildValue(
279-
"iiii", self->bbox.xMin, self->bbox.yMin, self->bbox.xMax, self->bbox.yMax);
279+
"llll", self->bbox.xMin, self->bbox.yMin, self->bbox.xMax, self->bbox.yMax);
280280
}
281281

282282
static PyTypeObject *PyGlyph_init_type(PyObject *m, PyTypeObject *type)
@@ -1025,7 +1025,7 @@ static PyObject *PyFT2Font_get_sfnt(PyFT2Font *self, PyObject *args, PyObject *k
10251025
}
10261026

10271027
PyObject *key = Py_BuildValue(
1028-
"iiii", sfnt.platform_id, sfnt.encoding_id, sfnt.language_id, sfnt.name_id);
1028+
"HHHH", sfnt.platform_id, sfnt.encoding_id, sfnt.language_id, sfnt.name_id);
10291029
if (key == NULL) {
10301030
Py_DECREF(names);
10311031
return NULL;
@@ -1089,7 +1089,7 @@ static PyObject *PyFT2Font_get_ps_font_info(PyFT2Font *self, PyObject *args, PyO
10891089
return NULL;
10901090
}
10911091

1092-
return Py_BuildValue("sssssliii",
1092+
return Py_BuildValue("ssssslbhH",
10931093
fontinfo.version ? fontinfo.version : "",
10941094
fontinfo.notice ? fontinfo.notice : "",
10951095
fontinfo.full_name ? fontinfo.full_name : "",
@@ -1134,8 +1134,8 @@ static PyObject *PyFT2Font_get_sfnt_table(PyFT2Font *self, PyObject *args, PyObj
11341134
switch (tag) {
11351135
case 0: {
11361136
char head_dict[] =
1137-
"{s:(h,h), s:(h,h), s:l, s:l, s:i, s:i,"
1138-
"s:(l,l), s:(l,l), s:h, s:h, s:h, s:h, s:i, s:i, s:h, s:h, s:h}";
1137+
"{s:(H,H), s:(H,H), s:l, s:l, s:H, s:H,"
1138+
"s:(l,l), s:(l,l), s:h, s:h, s:h, s:h, s:H, s:H, s:h, s:h, s:h}";
11391139
TT_Header *t = (TT_Header *)table;
11401140
return Py_BuildValue(head_dict,
11411141
"version",
@@ -1149,9 +1149,9 @@ static PyObject *PyFT2Font_get_sfnt_table(PyFT2Font *self, PyObject *args, PyObj
11491149
"magicNumber",
11501150
t->Magic_Number,
11511151
"flags",
1152-
(unsigned)t->Flags,
1152+
t->Flags,
11531153
"unitsPerEm",
1154-
(unsigned)t->Units_Per_EM,
1154+
t->Units_Per_EM,
11551155
"created",
11561156
t->Created[0],
11571157
t->Created[1],
@@ -1167,9 +1167,9 @@ static PyObject *PyFT2Font_get_sfnt_table(PyFT2Font *self, PyObject *args, PyObj
11671167
"yMax",
11681168
t->yMax,
11691169
"macStyle",
1170-
(unsigned)t->Mac_Style,
1170+
t->Mac_Style,
11711171
"lowestRecPPEM",
1172-
(unsigned)t->Lowest_Rec_PPEM,
1172+
t->Lowest_Rec_PPEM,
11731173
"fontDirectionHint",
11741174
t->Font_Direction,
11751175
"indexToLocFormat",
@@ -1179,64 +1179,64 @@ static PyObject *PyFT2Font_get_sfnt_table(PyFT2Font *self, PyObject *args, PyObj
11791179
}
11801180
case 1: {
11811181
char maxp_dict[] =
1182-
"{s:(h,h), s:i, s:i, s:i, s:i, s:i, s:i,"
1183-
"s:i, s:i, s:i, s:i, s:i, s:i, s:i, s:i}";
1182+
"{s:(h,h), s:H, s:H, s:H, s:H, s:H, s:H,"
1183+
"s:H, s:H, s:H, s:H, s:H, s:H, s:H, s:H}";
11841184
TT_MaxProfile *t = (TT_MaxProfile *)table;
11851185
return Py_BuildValue(maxp_dict,
11861186
"version",
11871187
FIXED_MAJOR(t->version),
11881188
FIXED_MINOR(t->version),
11891189
"numGlyphs",
1190-
(unsigned)t->numGlyphs,
1190+
t->numGlyphs,
11911191
"maxPoints",
1192-
(unsigned)t->maxPoints,
1192+
t->maxPoints,
11931193
"maxContours",
1194-
(unsigned)t->maxContours,
1194+
t->maxContours,
11951195
"maxComponentPoints",
1196-
(unsigned)t->maxCompositePoints,
1196+
t->maxCompositePoints,
11971197
"maxComponentContours",
1198-
(unsigned)t->maxCompositeContours,
1198+
t->maxCompositeContours,
11991199
"maxZones",
1200-
(unsigned)t->maxZones,
1200+
t->maxZones,
12011201
"maxTwilightPoints",
1202-
(unsigned)t->maxTwilightPoints,
1202+
t->maxTwilightPoints,
12031203
"maxStorage",
1204-
(unsigned)t->maxStorage,
1204+
t->maxStorage,
12051205
"maxFunctionDefs",
1206-
(unsigned)t->maxFunctionDefs,
1206+
t->maxFunctionDefs,
12071207
"maxInstructionDefs",
1208-
(unsigned)t->maxInstructionDefs,
1208+
t->maxInstructionDefs,
12091209
"maxStackElements",
1210-
(unsigned)t->maxStackElements,
1210+
t->maxStackElements,
12111211
"maxSizeOfInstructions",
1212-
(unsigned)t->maxSizeOfInstructions,
1212+
t->maxSizeOfInstructions,
12131213
"maxComponentElements",
1214-
(unsigned)t->maxComponentElements,
1214+
t->maxComponentElements,
12151215
"maxComponentDepth",
1216-
(unsigned)t->maxComponentDepth);
1216+
t->maxComponentDepth);
12171217
}
12181218
case 2: {
12191219
#if PY3K
12201220
char os_2_dict[] =
1221-
"{s:h, s:h, s:h, s:h, s:h, s:h, s:h, s:h,"
1222-
"s:h, s:h, s:h, s:h, s:h, s:h, s:h, s:h, s:y#, s:(llll),"
1223-
"s:y#, s:h, s:h, s:h}";
1221+
"{s:H, s:h, s:H, s:H, s:H, s:h, s:h, s:h,"
1222+
"s:h, s:h, s:h, s:h, s:h, s:h, s:h, s:h, s:y#, s:(kkkk),"
1223+
"s:y#, s:H, s:H, s:H}";
12241224
#else
12251225
char os_2_dict[] =
1226-
"{s:h, s:h, s:h, s:h, s:h, s:h, s:h, s:h,"
1227-
"s:h, s:h, s:h, s:h, s:h, s:h, s:h, s:h, s:s#, s:(llll),"
1228-
"s:s#, s:h, s:h, s:h}";
1226+
"{s:H, s:h, s:H, s:H, s:H, s:h, s:h, s:h,"
1227+
"s:h, s:h, s:h, s:h, s:h, s:h, s:h, s:h, s:s#, s:(kkkk),"
1228+
"s:s#, s:H, s:H, s:H}";
12291229
#endif
12301230
TT_OS2 *t = (TT_OS2 *)table;
12311231
return Py_BuildValue(os_2_dict,
12321232
"version",
1233-
(unsigned)t->version,
1233+
t->version,
12341234
"xAvgCharWidth",
12351235
t->xAvgCharWidth,
12361236
"usWeightClass",
1237-
(unsigned)t->usWeightClass,
1237+
t->usWeightClass,
12381238
"usWidthClass",
1239-
(unsigned)t->usWidthClass,
1239+
t->usWidthClass,
12401240
"fsType",
12411241
t->fsType,
12421242
"ySubscriptXSize",
@@ -1265,24 +1265,24 @@ static PyObject *PyFT2Font_get_sfnt_table(PyFT2Font *self, PyObject *args, PyObj
12651265
t->panose,
12661266
10,
12671267
"ulCharRange",
1268-
(unsigned long)t->ulUnicodeRange1,
1269-
(unsigned long)t->ulUnicodeRange2,
1270-
(unsigned long)t->ulUnicodeRange3,
1271-
(unsigned long)t->ulUnicodeRange4,
1268+
t->ulUnicodeRange1,
1269+
t->ulUnicodeRange2,
1270+
t->ulUnicodeRange3,
1271+
t->ulUnicodeRange4,
12721272
"achVendID",
12731273
t->achVendID,
12741274
4,
12751275
"fsSelection",
1276-
(unsigned)t->fsSelection,
1276+
t->fsSelection,
12771277
"fsFirstCharIndex",
1278-
(unsigned)t->usFirstCharIndex,
1278+
t->usFirstCharIndex,
12791279
"fsLastCharIndex",
1280-
(unsigned)t->usLastCharIndex);
1280+
t->usLastCharIndex);
12811281
}
12821282
case 3: {
12831283
char hhea_dict[] =
1284-
"{s:(h,h), s:h, s:h, s:h, s:i, s:h, s:h, s:h,"
1285-
"s:h, s:h, s:h, s:h, s:i}";
1284+
"{s:(H,H), s:h, s:h, s:h, s:H, s:h, s:h, s:h,"
1285+
"s:h, s:h, s:h, s:h, s:H}";
12861286
TT_HoriHeader *t = (TT_HoriHeader *)table;
12871287
return Py_BuildValue(hhea_dict,
12881288
"version",
@@ -1295,7 +1295,7 @@ static PyObject *PyFT2Font_get_sfnt_table(PyFT2Font *self, PyObject *args, PyObj
12951295
"lineGap",
12961296
t->Line_Gap,
12971297
"advanceWidthMax",
1298-
(unsigned)t->advance_Width_Max,
1298+
t->advance_Width_Max,
12991299
"minLeftBearing",
13001300
t->min_Left_Side_Bearing,
13011301
"minRightBearing",
@@ -1311,12 +1311,12 @@ static PyObject *PyFT2Font_get_sfnt_table(PyFT2Font *self, PyObject *args, PyObj
13111311
"metricDataFormat",
13121312
t->metric_Data_Format,
13131313
"numOfLongHorMetrics",
1314-
(unsigned)t->number_Of_HMetrics);
1314+
t->number_Of_HMetrics);
13151315
}
13161316
case 4: {
13171317
char vhea_dict[] =
1318-
"{s:(h,h), s:h, s:h, s:h, s:i, s:h, s:h, s:h,"
1319-
"s:h, s:h, s:h, s:h, s:i}";
1318+
"{s:(H,H), s:h, s:h, s:h, s:H, s:h, s:h, s:h,"
1319+
"s:h, s:h, s:h, s:h, s:H}";
13201320
TT_VertHeader *t = (TT_VertHeader *)table;
13211321
return Py_BuildValue(vhea_dict,
13221322
"version",
@@ -1329,7 +1329,7 @@ static PyObject *PyFT2Font_get_sfnt_table(PyFT2Font *self, PyObject *args, PyObj
13291329
"vertTypoLineGap",
13301330
t->Line_Gap,
13311331
"advanceHeightMax",
1332-
(unsigned)t->advance_Height_Max,
1332+
t->advance_Height_Max,
13331333
"minTopSideBearing",
13341334
t->min_Top_Side_Bearing,
13351335
"minBottomSizeBearing",
@@ -1345,10 +1345,10 @@ static PyObject *PyFT2Font_get_sfnt_table(PyFT2Font *self, PyObject *args, PyObj
13451345
"metricDataFormat",
13461346
t->metric_Data_Format,
13471347
"numOfLongVerMetrics",
1348-
(unsigned)t->number_Of_VMetrics);
1348+
t->number_Of_VMetrics);
13491349
}
13501350
case 5: {
1351-
char post_dict[] = "{s:(h,h), s:(h,h), s:h, s:h, s:k, s:k, s:k, s:k, s:k}";
1351+
char post_dict[] = "{s:(H,H), s:(H,H), s:h, s:h, s:k, s:k, s:k, s:k, s:k}";
13521352
TT_Postscript *t = (TT_Postscript *)table;
13531353
return Py_BuildValue(post_dict,
13541354
"format",
@@ -1375,12 +1375,12 @@ static PyObject *PyFT2Font_get_sfnt_table(PyFT2Font *self, PyObject *args, PyObj
13751375
case 6: {
13761376
#if PY3K
13771377
char pclt_dict[] =
1378-
"{s:(h,h), s:k, s:H, s:H, s:H, s:H, s:H, s:H, s:y, s:y, s:b, s:b, "
1379-
"s:b}";
1378+
"{s:(H,H), s:k, s:H, s:H, s:H, s:H, s:H, s:H, s:y#, s:y#, s:b, "
1379+
"s:b, s:b}";
13801380
#else
13811381
char pclt_dict[] =
1382-
"{s:(h,h), s:k, s:H, s:H, s:H, s:H, s:H, s:H, s:s, s:s, s:b, s:b, "
1383-
"s:b}";
1382+
"{s:(H,H), s:k, s:H, s:H, s:H, s:H, s:H, s:H, s:s#, s:s#, s:b, "
1383+
"s:b, s:b}";
13841384
#endif
13851385
TT_PCLT *t = (TT_PCLT *)table;
13861386
return Py_BuildValue(pclt_dict,
@@ -1403,8 +1403,10 @@ static PyObject *PyFT2Font_get_sfnt_table(PyFT2Font *self, PyObject *args, PyObj
14031403
t->SymbolSet,
14041404
"typeFace",
14051405
t->TypeFace,
1406+
16,
14061407
"characterComplement",
14071408
t->CharacterComplement,
1409+
8,
14081410
"strokeWeight",
14091411
t->StrokeWeight,
14101412
"widthType",
@@ -1527,7 +1529,8 @@ static PyObject *PyFT2Font_get_bbox(PyFT2Font *self, void *closure)
15271529
{
15281530
FT_BBox *bbox = &(self->x->get_face()->bbox);
15291531

1530-
return Py_BuildValue("iiii", bbox->xMin, bbox->yMin, bbox->xMax, bbox->yMax);
1532+
return Py_BuildValue("llll",
1533+
bbox->xMin, bbox->yMin, bbox->xMax, bbox->yMax);
15311534
}
15321535

15331536
static PyObject *PyFT2Font_ascender(PyFT2Font *self, void *closure)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy