@crossbind/port-expat-linux 2.0.0-beta.62 → 2.0.0-beta.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/prebuilt/CMakeLists.txt +2 -1
  2. package/dist/prebuilt/linux-arm64-mt-release/crossbind-source.fingerprint +1 -1
  3. package/dist/prebuilt/linux-arm64-mt-release/include/expat.h +72 -27
  4. package/dist/prebuilt/linux-arm64-mt-release/include/expat_config.h +2 -6
  5. package/dist/prebuilt/linux-arm64-mt-release/include/expat_external.h +3 -0
  6. package/dist/prebuilt/linux-arm64-mt-release/lib/cmake/{expat-2.8.5 → expat-2.9.0}/expat-config-version.cmake +3 -3
  7. package/dist/prebuilt/linux-arm64-mt-release/lib/libexpat.a +0 -0
  8. package/dist/prebuilt/linux-arm64-mt-release/lib/pkgconfig/expat.pc +2 -2
  9. package/dist/prebuilt/linux-arm64-mt-release/lib.sources +1 -0
  10. package/dist/prebuilt/linux-arm64-mt-release/share/doc/expat/changelog +102 -26
  11. package/dist/prebuilt/linux-x64-mt-release/crossbind-source.fingerprint +1 -1
  12. package/dist/prebuilt/linux-x64-mt-release/include/expat.h +72 -27
  13. package/dist/prebuilt/linux-x64-mt-release/include/expat_config.h +2 -6
  14. package/dist/prebuilt/linux-x64-mt-release/include/expat_external.h +3 -0
  15. package/dist/prebuilt/linux-x64-mt-release/lib/cmake/{expat-2.8.5 → expat-2.9.0}/expat-config-version.cmake +3 -3
  16. package/dist/prebuilt/linux-x64-mt-release/lib/libexpat.a +0 -0
  17. package/dist/prebuilt/linux-x64-mt-release/lib/pkgconfig/expat.pc +2 -2
  18. package/dist/prebuilt/linux-x64-mt-release/lib.sources +1 -0
  19. package/dist/prebuilt/linux-x64-mt-release/share/doc/expat/changelog +102 -26
  20. package/package.json +5 -5
  21. /package/dist/prebuilt/linux-arm64-mt-release/lib/cmake/{expat-2.8.5 → expat-2.9.0}/expat-config.cmake +0 -0
  22. /package/dist/prebuilt/linux-arm64-mt-release/lib/cmake/{expat-2.8.5 → expat-2.9.0}/expat-release.cmake +0 -0
  23. /package/dist/prebuilt/linux-arm64-mt-release/lib/cmake/{expat-2.8.5 → expat-2.9.0}/expat.cmake +0 -0
  24. /package/dist/prebuilt/linux-x64-mt-release/lib/cmake/{expat-2.8.5 → expat-2.9.0}/expat-config.cmake +0 -0
  25. /package/dist/prebuilt/linux-x64-mt-release/lib/cmake/{expat-2.8.5 → expat-2.9.0}/expat-release.cmake +0 -0
  26. /package/dist/prebuilt/linux-x64-mt-release/lib/cmake/{expat-2.8.5 → expat-2.9.0}/expat.cmake +0 -0
@@ -51,7 +51,8 @@ if(NOT PACKAGE_HOST_INDEX EQUAL -1)
51
51
  target_link_libraries("${PROJECT_NAME}" INTERFACE "${PROJECT_LIBS_DIR}")
52
52
  endif()
53
53
 
54
- if(NOT (APPLE AND CMAKE_SYSTEM_NAME STREQUAL "iOS"))
54
+ # On iOS each library's xcframework carries the headers, so only a header-only package needs them here.
55
+ if(NOT (APPLE AND CMAKE_SYSTEM_NAME STREQUAL "iOS") OR PROJECT_LIBS STREQUAL "")
55
56
  target_include_directories("${PROJECT_NAME}" INTERFACE "${PROJECT_SOURCE_DIR}/${PROJECT_TARGET_HOST}/include")
56
57
  endif()
57
58
  endif()
@@ -1 +1 @@
1
- 4f1d9c23ac3254bc7a76b76c9be59df1d38190282ef5e199f57ccab1bda192e6
1
+ f2a611220b7618bd33dd84ae3a807e855cab88af3da33b8713bde6716fb79743
@@ -48,7 +48,7 @@
48
48
  #ifndef Expat_INCLUDED
49
49
  # define Expat_INCLUDED 1
50
50
 
51
- # include <stdint.h> // for uint8_t
51
+ # include <stdint.h> // for int64_t, uint8_t, uint64_t
52
52
  # include <stdlib.h>
53
53
  # include "expat_external.h"
54
54
 
@@ -140,6 +140,26 @@ enum XML_Error {
140
140
  XML_ERROR_NOT_STARTED,
141
141
  };
142
142
 
143
+ /* Added in 2.9.0. */
144
+ enum XML_Prop_Error {
145
+ XML_PROP_ERROR_NONE = 0, // i.e. success
146
+
147
+ XML_PROP_ERROR_INVALID_KEY = 1, // i.e. the property is not known at all
148
+ XML_PROP_ERROR_INVALID_TYPE = 2, // i.e. the property is known but expects a
149
+ // different type (so a different
150
+ // getter/setter would need to be called)
151
+ XML_PROP_ERROR_INVALID_VALUE = 3, // i.e. the value is invalid (with a setter
152
+ // function) or a NULL-pointer (with a
153
+ // getter function)
154
+
155
+ XML_PROP_ERROR_PARSER_NULL = 4, // i.e. the parser argument is NULL
156
+ XML_PROP_ERROR_PARSER_NOT_ROOT = 5, // i.e. the parser is not a root parser
157
+ // but a subparser (and a root parser is
158
+ // needed)
159
+
160
+ /* potentially more error codes upcoming here */
161
+ };
162
+
143
163
  enum XML_Content_Type {
144
164
  XML_CTYPE_EMPTY = 1,
145
165
  XML_CTYPE_ANY,
@@ -757,29 +777,6 @@ XML_GetSpecifiedAttributeCount(XML_Parser parser);
757
777
  XMLPARSEAPI(int)
758
778
  XML_GetIdAttributeIndex(XML_Parser parser);
759
779
 
760
- # ifdef XML_ATTR_INFO
761
- /* Source file byte offsets for the start and end of attribute names and values.
762
- The value indices are exclusive of surrounding quotes; thus in a UTF-8 source
763
- file an attribute value of "blah" will yield:
764
- info->valueEnd - info->valueStart = 4 bytes.
765
- */
766
- typedef struct {
767
- XML_Index nameStart; /* Offset to beginning of the attribute name. */
768
- XML_Index nameEnd; /* Offset after the attribute name's last byte. */
769
- XML_Index valueStart; /* Offset to beginning of the attribute value. */
770
- XML_Index valueEnd; /* Offset after the attribute value's last byte. */
771
- } XML_AttrInfo;
772
-
773
- /* Returns an array of XML_AttrInfo structures for the attribute/value pairs
774
- passed in last call to the XML_StartElementHandler that were specified
775
- in the start-tag rather than defaulted. Each attribute/value pair counts
776
- as 1; thus the number of entries in the array is
777
- XML_GetSpecifiedAttributeCount(parser) / 2.
778
- */
779
- XMLPARSEAPI(const XML_AttrInfo *)
780
- XML_GetAttributeInfo(XML_Parser parser);
781
- # endif
782
-
783
780
  /* Parses some input. Returns XML_STATUS_ERROR if a fatal error is
784
781
  detected. The last call to XML_Parse must have isFinal true; len
785
782
  may be zero for this call (or any other).
@@ -964,15 +961,24 @@ XML_GetErrorCode(XML_Parser parser);
964
961
  return 0 to indicate an error.
965
962
  Note: XML_GetCurrentByteIndex returns -1 to indicate an error.
966
963
  */
964
+ XML_ATTR_DEPRECATED("please use XML_GetCurrentLineNumber64 instead")
967
965
  XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser);
966
+ XMLPARSEAPI(uint64_t) XML_GetCurrentLineNumber64(XML_Parser parser);
967
+ XML_ATTR_DEPRECATED("please use XML_GetCurrentColumnNumber64 instead")
968
968
  XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser);
969
+ XMLPARSEAPI(uint64_t) XML_GetCurrentColumnNumber64(XML_Parser parser);
970
+ XML_ATTR_DEPRECATED("please use XML_GetCurrentByteIndex64 instead")
969
971
  XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser);
972
+ XMLPARSEAPI(int64_t) XML_GetCurrentByteIndex64(XML_Parser parser);
970
973
 
971
974
  /* Return the number of bytes in the current event.
972
975
  Returns 0 if the event is in an internal entity.
973
976
  */
977
+ XML_ATTR_DEPRECATED("please use XML_GetCurrentByteCount64 instead")
974
978
  XMLPARSEAPI(int)
975
979
  XML_GetCurrentByteCount(XML_Parser parser);
980
+ XMLPARSEAPI(uint64_t)
981
+ XML_GetCurrentByteCount64(XML_Parser parser);
976
982
 
977
983
  /* If XML_CONTEXT_BYTES is >=1, returns the input buffer, sets
978
984
  the integer pointed to by offset to the offset within this buffer
@@ -984,8 +990,11 @@ XML_GetCurrentByteCount(XML_Parser parser);
984
990
  NOTE: The character pointer returned should not be used outside
985
991
  the handler that makes the call.
986
992
  */
993
+ XML_ATTR_DEPRECATED("please use XML_GetInputContext64 instead")
987
994
  XMLPARSEAPI(const char *)
988
995
  XML_GetInputContext(XML_Parser parser, int *offset, int *size);
996
+ XMLPARSEAPI(const char *)
997
+ XML_GetInputContext64(XML_Parser parser, int64_t *offset, uint64_t *size);
989
998
 
990
999
  /* For backwards compatibility with previous versions. */
991
1000
  # define XML_GetErrorLineNumber XML_GetCurrentLineNumber
@@ -1040,6 +1049,7 @@ enum XML_FeatureEnum {
1040
1049
  XML_FEATURE_UNICODE_WCHAR_T,
1041
1050
  XML_FEATURE_DTD,
1042
1051
  XML_FEATURE_CONTEXT_BYTES,
1052
+ /* Added in Expat 1.95.5, removed in Expat 2.9.0. */
1043
1053
  XML_FEATURE_MIN_SIZE,
1044
1054
  XML_FEATURE_SIZEOF_XML_CHAR,
1045
1055
  XML_FEATURE_SIZEOF_XML_LCHAR,
@@ -1047,7 +1057,7 @@ enum XML_FeatureEnum {
1047
1057
  XML_FEATURE_NS,
1048
1058
  /* Added in Expat 2.0.1. */
1049
1059
  XML_FEATURE_LARGE_SIZE,
1050
- /* Added in Expat 2.1.0. */
1060
+ /* Added in Expat 2.1.0, removed in Expat 2.9.0. */
1051
1061
  XML_FEATURE_ATTR_INFO,
1052
1062
  /* Added in Expat 2.4.0. */
1053
1063
  XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT,
@@ -1069,6 +1079,41 @@ typedef struct {
1069
1079
  XMLPARSEAPI(const XML_Feature *)
1070
1080
  XML_GetFeatureList(void);
1071
1081
 
1082
+ /* Added in Expat 2.9.0. */
1083
+ enum XML_Parser_Property {
1084
+ # if defined(XML_TESTING)
1085
+ XML_PROP_INVALID = 0,
1086
+ # endif
1087
+ # if XML_GE == 1
1088
+ XML_PROP_ALLOC_TRACKER_ACTIVATION_THRESHOLD = 1, // of type `uint64_t`
1089
+ XML_PROP_ALLOC_TRACKER_MAXIMUM_AMPLIFICATION = 2, // of type `double`
1090
+ XML_PROP_BILLION_LAUGHS_ACTIVATION_THRESHOLD = 3, // of type `uint64_t`
1091
+ XML_PROP_BILLION_LAUGHS_MAXIMUM_AMPLIFICATION = 4, // of type `double`
1092
+ # endif
1093
+ XML_PROP_REPARSE_DEFERRAL_ENABLED = 5, // of type `XML_Bool`
1094
+ /* more properties upcoming here */
1095
+ };
1096
+
1097
+ /* Added in Expat 2.9.0. */
1098
+ XMLPARSEAPI(enum XML_Prop_Error)
1099
+ XML_GetPropertyBool(XML_Parser parser, enum XML_Parser_Property property,
1100
+ XML_Bool *value);
1101
+ XMLPARSEAPI(enum XML_Prop_Error)
1102
+ XML_GetPropertyDouble(XML_Parser parser, enum XML_Parser_Property property,
1103
+ double *value);
1104
+ XMLPARSEAPI(enum XML_Prop_Error)
1105
+ XML_GetPropertyUInt64(XML_Parser parser, enum XML_Parser_Property property,
1106
+ uint64_t *value);
1107
+ XMLPARSEAPI(enum XML_Prop_Error)
1108
+ XML_SetPropertyBool(XML_Parser parser, enum XML_Parser_Property property,
1109
+ XML_Bool value);
1110
+ XMLPARSEAPI(enum XML_Prop_Error)
1111
+ XML_SetPropertyDouble(XML_Parser parser, enum XML_Parser_Property property,
1112
+ double value);
1113
+ XMLPARSEAPI(enum XML_Prop_Error)
1114
+ XML_SetPropertyUInt64(XML_Parser parser, enum XML_Parser_Property property,
1115
+ uint64_t value);
1116
+
1072
1117
  # if defined(XML_DTD) || (defined(XML_GE) && XML_GE == 1)
1073
1118
  /* Added in Expat 2.4.0 for XML_DTD defined and
1074
1119
  * added in Expat 2.6.0 for XML_GE == 1. */
@@ -1101,8 +1146,8 @@ XML_SetReparseDeferralEnabled(XML_Parser parser, XML_Bool enabled);
1101
1146
  See https://semver.org
1102
1147
  */
1103
1148
  # define XML_MAJOR_VERSION 2
1104
- # define XML_MINOR_VERSION 8
1105
- # define XML_MICRO_VERSION 5
1149
+ # define XML_MINOR_VERSION 9
1150
+ # define XML_MICRO_VERSION 0
1106
1151
 
1107
1152
  # ifdef __cplusplus
1108
1153
  }
@@ -70,7 +70,7 @@
70
70
  #define PACKAGE_NAME "expat"
71
71
 
72
72
  /* Define to the full name and version of this package. */
73
- #define PACKAGE_STRING "expat 2.8.5"
73
+ #define PACKAGE_STRING "expat 2.9.0"
74
74
 
75
75
  /* Define to the one symbol short name of this package. */
76
76
  #define PACKAGE_TARNAME "expat"
@@ -79,7 +79,7 @@
79
79
  # define PACKAGE_URL ""
80
80
 
81
81
  /* Define to the version of this package. */
82
- #define PACKAGE_VERSION "2.8.5"
82
+ #define PACKAGE_VERSION "2.9.0"
83
83
 
84
84
  /* Define to 1 if you have the ANSI C header files. */
85
85
  # ifndef STDC_HEADERS
@@ -89,10 +89,6 @@
89
89
  /* whether byteorder is bigendian */
90
90
  /* #undef WORDS_BIGENDIAN */
91
91
 
92
- /* Define to allow retrieving the byte offsets for attribute names and values.
93
- */
94
- /* #undef XML_ATTR_INFO */
95
-
96
92
  /* Define to specify how much context to retain around the current parse
97
93
  point, 0 to disable. */
98
94
  # define XML_CONTEXT_BYTES 1024
@@ -166,6 +166,9 @@ typedef char XML_LChar;
166
166
  # endif /* XML_UNICODE */
167
167
 
168
168
  # ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */
169
+ # if defined(__clang__) || defined(__GNUC__)
170
+ # warning Macro XML_LARGE_SIZE is deprecated, please use the 64bit location API functions instead.
171
+ # endif
169
172
  typedef long long XML_Index;
170
173
  typedef unsigned long long XML_Size;
171
174
  # else
@@ -9,19 +9,19 @@
9
9
  # The variable CVF_VERSION must be set before calling configure_file().
10
10
 
11
11
 
12
- set(PACKAGE_VERSION "2.8.5")
12
+ set(PACKAGE_VERSION "2.9.0")
13
13
 
14
14
  if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
15
15
  set(PACKAGE_VERSION_COMPATIBLE FALSE)
16
16
  else()
17
17
 
18
- if("2.8.5" MATCHES "^([0-9]+)\\.")
18
+ if("2.9.0" MATCHES "^([0-9]+)\\.")
19
19
  set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
20
20
  if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
21
21
  string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
22
22
  endif()
23
23
  else()
24
- set(CVF_VERSION_MAJOR "2.8.5")
24
+ set(CVF_VERSION_MAJOR "2.9.0")
25
25
  endif()
26
26
 
27
27
  if(PACKAGE_FIND_VERSION_RANGE)
@@ -1,10 +1,10 @@
1
- prefix=/tmp/crossbind/live/expat/linux/.crossbind/build/Source-Release/prebuilt/linux-arm64-mt-release
1
+ prefix=${pcfiledir}/../..
2
2
  exec_prefix=${prefix}
3
3
  libdir=${exec_prefix}/lib
4
4
  includedir=${prefix}/include
5
5
 
6
6
  Name: expat
7
- Version: 2.8.5
7
+ Version: 2.9.0
8
8
  Description: expat XML parser
9
9
  URL: https://libexpat.github.io/
10
10
  Libs: -L${libdir} -lexpat
@@ -0,0 +1 @@
1
+ 1a30fe6e87582a2965301d28fb2f9b81756b9c67ef7ba926cf75653900ee03a2
@@ -5,21 +5,108 @@
5
5
  \___/_/\_\ .__/ \__,_|\__|
6
6
  |_| XML parser
7
7
 
8
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9
- !! <blink>Expat has UNFIXED SECURITY ISSUES!</blink> !!
10
- !! Please see https://github.com/libexpat/libexpat/issues/1160 for details. !!
11
- !! !!
12
- !! Starting 2026-08-01, for up to six months my work maintaining libexpat !!
13
- !! will be funded by the City of Munich as part of their !!
14
- !! Open Source Sabbatical (https://opensource.muenchen.de/sabbatical.html) !!
15
- !! — thank you! !!
16
- !! !!
17
- !! If your business relies on Expat beyond January 2027, please consider !!
18
- !! funding the maintenance of Expat to ensure its health and security for !!
19
- !! you and others. Thank you! !!
20
- !! !!
21
- !! Sebastian Pipping -- Berlin, 2026-09-22 !!
22
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8
+ ///////////////////////////////////////////////////////////////////////////////
9
+ // <blink>Expat has UNFIXED SECURITY ISSUES!</blink> //
10
+ // Please see https://github.com/libexpat/libexpat/issues/1160 for details. //
11
+ // //
12
+ // Starting 2026-08-01, for up to six months my work maintaining libexpat //
13
+ // will be funded by the City of Munich as part of their //
14
+ // Open Source Sabbatical (https://opensource.muenchen.de/sabbatical.html) //
15
+ // — thank you! //
16
+ // //
17
+ // If your business relies on Expat beyond January 2027, please consider //
18
+ // funding the maintenance of Expat to ensure its health and security for //
19
+ // you and others. Thank you! //
20
+ // //
21
+ // Sebastian Pipping -- Berlin, 2026-09-22 //
22
+ ///////////////////////////////////////////////////////////////////////////////
23
+
24
+ Release 2.9.0 Mon October 5 2026
25
+ Security fixes:
26
+ #1392 CVE-2026-102633 -- Integer overflow in function
27
+ expat_realloc on 32bit platforms
28
+ #1393 CVE-2026-77214 -- Validate parameter `len` against available
29
+ buffer capacity in XML_ParseBuffer
30
+
31
+ Bug fixes:
32
+ #1387 lib: Handle OOM when copying encodingName in XML_ParserReset
33
+
34
+ New features:
35
+ #1327 lib: Introduce new "Properties API" to get and set
36
+ scalar properties for a single parser instance.
37
+ There are six new functions:
38
+ - XML_GetPropertyBool
39
+ - XML_GetPropertyDouble
40
+ - XML_GetPropertyUInt64
41
+ - XML_SetPropertyBool
42
+ - XML_SetPropertyDouble
43
+ - XML_SetPropertyUInt64
44
+ And two new enums:
45
+ - XML_Prop_Error
46
+ - XML_Parser_Property
47
+ #1323 lib: Introduce five new 64bit location API functions:
48
+ - XML_GetCurrentByteCount64
49
+ - XML_GetCurrentByteIndex64
50
+ - XML_GetCurrentColumnNumber64
51
+ - XML_GetCurrentLineNumber64
52
+ - XML_GetInputContext64
53
+ These five functions closely mirror their predecessors
54
+ but are not prone to 32bit integer wrap-around.
55
+
56
+ Other changes:
57
+ #1391 docs: Document the scope of function XML_GetErrorCode
58
+ #1395 docs: Document length expectations for XML_ParseBuffer
59
+ #1394 lib: Call unknown encoding release before parser teardown
60
+ #1370 #1373 lib: Drop (disabled-by-default) attribute info feature
61
+ These things are now gone:
62
+ - Public function XML_GetAttributeInfo
63
+ - Public struct XML_AttrInfo
64
+ - Macro XML_ATTR_INFO
65
+ These things are now causing build errors:
66
+ - Configure option --enable-xml-attr-info
67
+ - CMake option -DEXPAT_ATTR_INFO=ON
68
+ #1379 #1382 lib: Drop (disabled-by-default) minimum size feature
69
+ These things are now gone:
70
+ - Macro XML_MIN_SIZE
71
+ These things are now causing build errors:
72
+ - Configuring with -DXML_MIN_SIZE for CPPFLAGS/CFLAGS
73
+ - CMake option -DEXPAT_MIN_SIZE=ON
74
+ #1323 #1411 lib: Deprecate macro XML_LARGE_SIZE (use the new 64bit
75
+ location API functions instead please)
76
+ #1323 lib: Deprecate five location API functions that are cursed
77
+ with integer wrap-around:
78
+ - XML_GetCurrentByteCount
79
+ - XML_GetCurrentByteIndex
80
+ - XML_GetCurrentColumnNumber
81
+ - XML_GetCurrentLineNumber
82
+ - XML_GetInputContext
83
+ #1399 lib: Guard against out-of-handler use of XML_DefaultCurrent
84
+ #1400 lib: Use size_t for bytesAllocated and peakBytesAllocated
85
+ #1401 #1402 ..
86
+ #1404 #1405 lib|xmlwf|tests: Unify use of xcslen, xcscmp and xcsncmp
87
+ #1406 xmlwf: Add missing `#include "expat.h"`
88
+ #1389 #1396 Version info bumped from 13:5:12 (libexpat*.so.1.12.5)
89
+ to 14:0:13 (libexpat*.so.1.13.0); see https://verbump.de/
90
+ for what these numbers do
91
+
92
+ Infrastructure:
93
+ #1386 CI: Bump MinGW Clang from 23.1.1 to 23.1.2
94
+ #1410 CI: Bump Fil-C from 0.685 to 0.686
95
+ #1388 CI: Adapt to breaking changes regarding windows-11-arm image
96
+ #1403 CI: Limit package cache download runtime
97
+
98
+ Special thanks to:
99
+ Bénédikt Tran
100
+ Berkay Eren Ürün
101
+ Fabian Wahle (Hap Security)
102
+ Filippo Tedeschi
103
+ Junki Lee
104
+ Matthew Fernandez
105
+ Scott Moore
106
+ Wade Sparks III
107
+ and
108
+ City of Munich Open Source Sabbatical
109
+ VulnCheck
23
110
 
24
111
  Release 2.8.5 Tue September 22 2026
25
112
  Security fixes:
@@ -33,17 +120,6 @@ Release 2.8.5 Tue September 22 2026
33
120
  Upstream CVSS 3.1 vector:
34
121
  AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (CVSS score: 9.8)
35
122
 
36
- ///////////////////////////////////////////////////////////////////////////////
37
- // The next release will drop two (disabled-by-default) features: //
38
- // //
39
- // - ATTR_INFO (-DXML_ATTR_INFO, -DEXPAT_ATTR_INFO, --enable-xml-attr-info, //
40
- // function XML_GetAttributeInfo, struct XML_AttrInfo) //
41
- // - MIN_SIZE (-DXML_MIN_SIZE, -DEXPAT_MIN_SIZE) //
42
- // //
43
- // If you need them in 2026 and beyond, please share your scenario at //
44
- // GitHub issues #1370 (for ATTR_INFO) and/or #1379 (for MIN_SIZE). Thanks! //
45
- ///////////////////////////////////////////////////////////////////////////////
46
-
47
123
  Bug fixes:
48
124
  #1346 lib: Fix OOM-related memory leak on a failed overflow check
49
125
  #1371 lib: Fix memory alignment for architectures with 128bit
@@ -1 +1 @@
1
- 4f1d9c23ac3254bc7a76b76c9be59df1d38190282ef5e199f57ccab1bda192e6
1
+ f2a611220b7618bd33dd84ae3a807e855cab88af3da33b8713bde6716fb79743
@@ -48,7 +48,7 @@
48
48
  #ifndef Expat_INCLUDED
49
49
  # define Expat_INCLUDED 1
50
50
 
51
- # include <stdint.h> // for uint8_t
51
+ # include <stdint.h> // for int64_t, uint8_t, uint64_t
52
52
  # include <stdlib.h>
53
53
  # include "expat_external.h"
54
54
 
@@ -140,6 +140,26 @@ enum XML_Error {
140
140
  XML_ERROR_NOT_STARTED,
141
141
  };
142
142
 
143
+ /* Added in 2.9.0. */
144
+ enum XML_Prop_Error {
145
+ XML_PROP_ERROR_NONE = 0, // i.e. success
146
+
147
+ XML_PROP_ERROR_INVALID_KEY = 1, // i.e. the property is not known at all
148
+ XML_PROP_ERROR_INVALID_TYPE = 2, // i.e. the property is known but expects a
149
+ // different type (so a different
150
+ // getter/setter would need to be called)
151
+ XML_PROP_ERROR_INVALID_VALUE = 3, // i.e. the value is invalid (with a setter
152
+ // function) or a NULL-pointer (with a
153
+ // getter function)
154
+
155
+ XML_PROP_ERROR_PARSER_NULL = 4, // i.e. the parser argument is NULL
156
+ XML_PROP_ERROR_PARSER_NOT_ROOT = 5, // i.e. the parser is not a root parser
157
+ // but a subparser (and a root parser is
158
+ // needed)
159
+
160
+ /* potentially more error codes upcoming here */
161
+ };
162
+
143
163
  enum XML_Content_Type {
144
164
  XML_CTYPE_EMPTY = 1,
145
165
  XML_CTYPE_ANY,
@@ -757,29 +777,6 @@ XML_GetSpecifiedAttributeCount(XML_Parser parser);
757
777
  XMLPARSEAPI(int)
758
778
  XML_GetIdAttributeIndex(XML_Parser parser);
759
779
 
760
- # ifdef XML_ATTR_INFO
761
- /* Source file byte offsets for the start and end of attribute names and values.
762
- The value indices are exclusive of surrounding quotes; thus in a UTF-8 source
763
- file an attribute value of "blah" will yield:
764
- info->valueEnd - info->valueStart = 4 bytes.
765
- */
766
- typedef struct {
767
- XML_Index nameStart; /* Offset to beginning of the attribute name. */
768
- XML_Index nameEnd; /* Offset after the attribute name's last byte. */
769
- XML_Index valueStart; /* Offset to beginning of the attribute value. */
770
- XML_Index valueEnd; /* Offset after the attribute value's last byte. */
771
- } XML_AttrInfo;
772
-
773
- /* Returns an array of XML_AttrInfo structures for the attribute/value pairs
774
- passed in last call to the XML_StartElementHandler that were specified
775
- in the start-tag rather than defaulted. Each attribute/value pair counts
776
- as 1; thus the number of entries in the array is
777
- XML_GetSpecifiedAttributeCount(parser) / 2.
778
- */
779
- XMLPARSEAPI(const XML_AttrInfo *)
780
- XML_GetAttributeInfo(XML_Parser parser);
781
- # endif
782
-
783
780
  /* Parses some input. Returns XML_STATUS_ERROR if a fatal error is
784
781
  detected. The last call to XML_Parse must have isFinal true; len
785
782
  may be zero for this call (or any other).
@@ -964,15 +961,24 @@ XML_GetErrorCode(XML_Parser parser);
964
961
  return 0 to indicate an error.
965
962
  Note: XML_GetCurrentByteIndex returns -1 to indicate an error.
966
963
  */
964
+ XML_ATTR_DEPRECATED("please use XML_GetCurrentLineNumber64 instead")
967
965
  XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser);
966
+ XMLPARSEAPI(uint64_t) XML_GetCurrentLineNumber64(XML_Parser parser);
967
+ XML_ATTR_DEPRECATED("please use XML_GetCurrentColumnNumber64 instead")
968
968
  XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser);
969
+ XMLPARSEAPI(uint64_t) XML_GetCurrentColumnNumber64(XML_Parser parser);
970
+ XML_ATTR_DEPRECATED("please use XML_GetCurrentByteIndex64 instead")
969
971
  XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser);
972
+ XMLPARSEAPI(int64_t) XML_GetCurrentByteIndex64(XML_Parser parser);
970
973
 
971
974
  /* Return the number of bytes in the current event.
972
975
  Returns 0 if the event is in an internal entity.
973
976
  */
977
+ XML_ATTR_DEPRECATED("please use XML_GetCurrentByteCount64 instead")
974
978
  XMLPARSEAPI(int)
975
979
  XML_GetCurrentByteCount(XML_Parser parser);
980
+ XMLPARSEAPI(uint64_t)
981
+ XML_GetCurrentByteCount64(XML_Parser parser);
976
982
 
977
983
  /* If XML_CONTEXT_BYTES is >=1, returns the input buffer, sets
978
984
  the integer pointed to by offset to the offset within this buffer
@@ -984,8 +990,11 @@ XML_GetCurrentByteCount(XML_Parser parser);
984
990
  NOTE: The character pointer returned should not be used outside
985
991
  the handler that makes the call.
986
992
  */
993
+ XML_ATTR_DEPRECATED("please use XML_GetInputContext64 instead")
987
994
  XMLPARSEAPI(const char *)
988
995
  XML_GetInputContext(XML_Parser parser, int *offset, int *size);
996
+ XMLPARSEAPI(const char *)
997
+ XML_GetInputContext64(XML_Parser parser, int64_t *offset, uint64_t *size);
989
998
 
990
999
  /* For backwards compatibility with previous versions. */
991
1000
  # define XML_GetErrorLineNumber XML_GetCurrentLineNumber
@@ -1040,6 +1049,7 @@ enum XML_FeatureEnum {
1040
1049
  XML_FEATURE_UNICODE_WCHAR_T,
1041
1050
  XML_FEATURE_DTD,
1042
1051
  XML_FEATURE_CONTEXT_BYTES,
1052
+ /* Added in Expat 1.95.5, removed in Expat 2.9.0. */
1043
1053
  XML_FEATURE_MIN_SIZE,
1044
1054
  XML_FEATURE_SIZEOF_XML_CHAR,
1045
1055
  XML_FEATURE_SIZEOF_XML_LCHAR,
@@ -1047,7 +1057,7 @@ enum XML_FeatureEnum {
1047
1057
  XML_FEATURE_NS,
1048
1058
  /* Added in Expat 2.0.1. */
1049
1059
  XML_FEATURE_LARGE_SIZE,
1050
- /* Added in Expat 2.1.0. */
1060
+ /* Added in Expat 2.1.0, removed in Expat 2.9.0. */
1051
1061
  XML_FEATURE_ATTR_INFO,
1052
1062
  /* Added in Expat 2.4.0. */
1053
1063
  XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT,
@@ -1069,6 +1079,41 @@ typedef struct {
1069
1079
  XMLPARSEAPI(const XML_Feature *)
1070
1080
  XML_GetFeatureList(void);
1071
1081
 
1082
+ /* Added in Expat 2.9.0. */
1083
+ enum XML_Parser_Property {
1084
+ # if defined(XML_TESTING)
1085
+ XML_PROP_INVALID = 0,
1086
+ # endif
1087
+ # if XML_GE == 1
1088
+ XML_PROP_ALLOC_TRACKER_ACTIVATION_THRESHOLD = 1, // of type `uint64_t`
1089
+ XML_PROP_ALLOC_TRACKER_MAXIMUM_AMPLIFICATION = 2, // of type `double`
1090
+ XML_PROP_BILLION_LAUGHS_ACTIVATION_THRESHOLD = 3, // of type `uint64_t`
1091
+ XML_PROP_BILLION_LAUGHS_MAXIMUM_AMPLIFICATION = 4, // of type `double`
1092
+ # endif
1093
+ XML_PROP_REPARSE_DEFERRAL_ENABLED = 5, // of type `XML_Bool`
1094
+ /* more properties upcoming here */
1095
+ };
1096
+
1097
+ /* Added in Expat 2.9.0. */
1098
+ XMLPARSEAPI(enum XML_Prop_Error)
1099
+ XML_GetPropertyBool(XML_Parser parser, enum XML_Parser_Property property,
1100
+ XML_Bool *value);
1101
+ XMLPARSEAPI(enum XML_Prop_Error)
1102
+ XML_GetPropertyDouble(XML_Parser parser, enum XML_Parser_Property property,
1103
+ double *value);
1104
+ XMLPARSEAPI(enum XML_Prop_Error)
1105
+ XML_GetPropertyUInt64(XML_Parser parser, enum XML_Parser_Property property,
1106
+ uint64_t *value);
1107
+ XMLPARSEAPI(enum XML_Prop_Error)
1108
+ XML_SetPropertyBool(XML_Parser parser, enum XML_Parser_Property property,
1109
+ XML_Bool value);
1110
+ XMLPARSEAPI(enum XML_Prop_Error)
1111
+ XML_SetPropertyDouble(XML_Parser parser, enum XML_Parser_Property property,
1112
+ double value);
1113
+ XMLPARSEAPI(enum XML_Prop_Error)
1114
+ XML_SetPropertyUInt64(XML_Parser parser, enum XML_Parser_Property property,
1115
+ uint64_t value);
1116
+
1072
1117
  # if defined(XML_DTD) || (defined(XML_GE) && XML_GE == 1)
1073
1118
  /* Added in Expat 2.4.0 for XML_DTD defined and
1074
1119
  * added in Expat 2.6.0 for XML_GE == 1. */
@@ -1101,8 +1146,8 @@ XML_SetReparseDeferralEnabled(XML_Parser parser, XML_Bool enabled);
1101
1146
  See https://semver.org
1102
1147
  */
1103
1148
  # define XML_MAJOR_VERSION 2
1104
- # define XML_MINOR_VERSION 8
1105
- # define XML_MICRO_VERSION 5
1149
+ # define XML_MINOR_VERSION 9
1150
+ # define XML_MICRO_VERSION 0
1106
1151
 
1107
1152
  # ifdef __cplusplus
1108
1153
  }
@@ -70,7 +70,7 @@
70
70
  #define PACKAGE_NAME "expat"
71
71
 
72
72
  /* Define to the full name and version of this package. */
73
- #define PACKAGE_STRING "expat 2.8.5"
73
+ #define PACKAGE_STRING "expat 2.9.0"
74
74
 
75
75
  /* Define to the one symbol short name of this package. */
76
76
  #define PACKAGE_TARNAME "expat"
@@ -79,7 +79,7 @@
79
79
  # define PACKAGE_URL ""
80
80
 
81
81
  /* Define to the version of this package. */
82
- #define PACKAGE_VERSION "2.8.5"
82
+ #define PACKAGE_VERSION "2.9.0"
83
83
 
84
84
  /* Define to 1 if you have the ANSI C header files. */
85
85
  # ifndef STDC_HEADERS
@@ -89,10 +89,6 @@
89
89
  /* whether byteorder is bigendian */
90
90
  /* #undef WORDS_BIGENDIAN */
91
91
 
92
- /* Define to allow retrieving the byte offsets for attribute names and values.
93
- */
94
- /* #undef XML_ATTR_INFO */
95
-
96
92
  /* Define to specify how much context to retain around the current parse
97
93
  point, 0 to disable. */
98
94
  # define XML_CONTEXT_BYTES 1024
@@ -166,6 +166,9 @@ typedef char XML_LChar;
166
166
  # endif /* XML_UNICODE */
167
167
 
168
168
  # ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */
169
+ # if defined(__clang__) || defined(__GNUC__)
170
+ # warning Macro XML_LARGE_SIZE is deprecated, please use the 64bit location API functions instead.
171
+ # endif
169
172
  typedef long long XML_Index;
170
173
  typedef unsigned long long XML_Size;
171
174
  # else
@@ -9,19 +9,19 @@
9
9
  # The variable CVF_VERSION must be set before calling configure_file().
10
10
 
11
11
 
12
- set(PACKAGE_VERSION "2.8.5")
12
+ set(PACKAGE_VERSION "2.9.0")
13
13
 
14
14
  if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
15
15
  set(PACKAGE_VERSION_COMPATIBLE FALSE)
16
16
  else()
17
17
 
18
- if("2.8.5" MATCHES "^([0-9]+)\\.")
18
+ if("2.9.0" MATCHES "^([0-9]+)\\.")
19
19
  set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
20
20
  if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
21
21
  string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
22
22
  endif()
23
23
  else()
24
- set(CVF_VERSION_MAJOR "2.8.5")
24
+ set(CVF_VERSION_MAJOR "2.9.0")
25
25
  endif()
26
26
 
27
27
  if(PACKAGE_FIND_VERSION_RANGE)
@@ -1,10 +1,10 @@
1
- prefix=/tmp/crossbind/live/expat/linux/.crossbind/build/Source-Release/prebuilt/linux-x64-mt-release
1
+ prefix=${pcfiledir}/../..
2
2
  exec_prefix=${prefix}
3
3
  libdir=${exec_prefix}/lib
4
4
  includedir=${prefix}/include
5
5
 
6
6
  Name: expat
7
- Version: 2.8.5
7
+ Version: 2.9.0
8
8
  Description: expat XML parser
9
9
  URL: https://libexpat.github.io/
10
10
  Libs: -L${libdir} -lexpat
@@ -0,0 +1 @@
1
+ 1a30fe6e87582a2965301d28fb2f9b81756b9c67ef7ba926cf75653900ee03a2
@@ -5,21 +5,108 @@
5
5
  \___/_/\_\ .__/ \__,_|\__|
6
6
  |_| XML parser
7
7
 
8
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9
- !! <blink>Expat has UNFIXED SECURITY ISSUES!</blink> !!
10
- !! Please see https://github.com/libexpat/libexpat/issues/1160 for details. !!
11
- !! !!
12
- !! Starting 2026-08-01, for up to six months my work maintaining libexpat !!
13
- !! will be funded by the City of Munich as part of their !!
14
- !! Open Source Sabbatical (https://opensource.muenchen.de/sabbatical.html) !!
15
- !! — thank you! !!
16
- !! !!
17
- !! If your business relies on Expat beyond January 2027, please consider !!
18
- !! funding the maintenance of Expat to ensure its health and security for !!
19
- !! you and others. Thank you! !!
20
- !! !!
21
- !! Sebastian Pipping -- Berlin, 2026-09-22 !!
22
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8
+ ///////////////////////////////////////////////////////////////////////////////
9
+ // <blink>Expat has UNFIXED SECURITY ISSUES!</blink> //
10
+ // Please see https://github.com/libexpat/libexpat/issues/1160 for details. //
11
+ // //
12
+ // Starting 2026-08-01, for up to six months my work maintaining libexpat //
13
+ // will be funded by the City of Munich as part of their //
14
+ // Open Source Sabbatical (https://opensource.muenchen.de/sabbatical.html) //
15
+ // — thank you! //
16
+ // //
17
+ // If your business relies on Expat beyond January 2027, please consider //
18
+ // funding the maintenance of Expat to ensure its health and security for //
19
+ // you and others. Thank you! //
20
+ // //
21
+ // Sebastian Pipping -- Berlin, 2026-09-22 //
22
+ ///////////////////////////////////////////////////////////////////////////////
23
+
24
+ Release 2.9.0 Mon October 5 2026
25
+ Security fixes:
26
+ #1392 CVE-2026-102633 -- Integer overflow in function
27
+ expat_realloc on 32bit platforms
28
+ #1393 CVE-2026-77214 -- Validate parameter `len` against available
29
+ buffer capacity in XML_ParseBuffer
30
+
31
+ Bug fixes:
32
+ #1387 lib: Handle OOM when copying encodingName in XML_ParserReset
33
+
34
+ New features:
35
+ #1327 lib: Introduce new "Properties API" to get and set
36
+ scalar properties for a single parser instance.
37
+ There are six new functions:
38
+ - XML_GetPropertyBool
39
+ - XML_GetPropertyDouble
40
+ - XML_GetPropertyUInt64
41
+ - XML_SetPropertyBool
42
+ - XML_SetPropertyDouble
43
+ - XML_SetPropertyUInt64
44
+ And two new enums:
45
+ - XML_Prop_Error
46
+ - XML_Parser_Property
47
+ #1323 lib: Introduce five new 64bit location API functions:
48
+ - XML_GetCurrentByteCount64
49
+ - XML_GetCurrentByteIndex64
50
+ - XML_GetCurrentColumnNumber64
51
+ - XML_GetCurrentLineNumber64
52
+ - XML_GetInputContext64
53
+ These five functions closely mirror their predecessors
54
+ but are not prone to 32bit integer wrap-around.
55
+
56
+ Other changes:
57
+ #1391 docs: Document the scope of function XML_GetErrorCode
58
+ #1395 docs: Document length expectations for XML_ParseBuffer
59
+ #1394 lib: Call unknown encoding release before parser teardown
60
+ #1370 #1373 lib: Drop (disabled-by-default) attribute info feature
61
+ These things are now gone:
62
+ - Public function XML_GetAttributeInfo
63
+ - Public struct XML_AttrInfo
64
+ - Macro XML_ATTR_INFO
65
+ These things are now causing build errors:
66
+ - Configure option --enable-xml-attr-info
67
+ - CMake option -DEXPAT_ATTR_INFO=ON
68
+ #1379 #1382 lib: Drop (disabled-by-default) minimum size feature
69
+ These things are now gone:
70
+ - Macro XML_MIN_SIZE
71
+ These things are now causing build errors:
72
+ - Configuring with -DXML_MIN_SIZE for CPPFLAGS/CFLAGS
73
+ - CMake option -DEXPAT_MIN_SIZE=ON
74
+ #1323 #1411 lib: Deprecate macro XML_LARGE_SIZE (use the new 64bit
75
+ location API functions instead please)
76
+ #1323 lib: Deprecate five location API functions that are cursed
77
+ with integer wrap-around:
78
+ - XML_GetCurrentByteCount
79
+ - XML_GetCurrentByteIndex
80
+ - XML_GetCurrentColumnNumber
81
+ - XML_GetCurrentLineNumber
82
+ - XML_GetInputContext
83
+ #1399 lib: Guard against out-of-handler use of XML_DefaultCurrent
84
+ #1400 lib: Use size_t for bytesAllocated and peakBytesAllocated
85
+ #1401 #1402 ..
86
+ #1404 #1405 lib|xmlwf|tests: Unify use of xcslen, xcscmp and xcsncmp
87
+ #1406 xmlwf: Add missing `#include "expat.h"`
88
+ #1389 #1396 Version info bumped from 13:5:12 (libexpat*.so.1.12.5)
89
+ to 14:0:13 (libexpat*.so.1.13.0); see https://verbump.de/
90
+ for what these numbers do
91
+
92
+ Infrastructure:
93
+ #1386 CI: Bump MinGW Clang from 23.1.1 to 23.1.2
94
+ #1410 CI: Bump Fil-C from 0.685 to 0.686
95
+ #1388 CI: Adapt to breaking changes regarding windows-11-arm image
96
+ #1403 CI: Limit package cache download runtime
97
+
98
+ Special thanks to:
99
+ Bénédikt Tran
100
+ Berkay Eren Ürün
101
+ Fabian Wahle (Hap Security)
102
+ Filippo Tedeschi
103
+ Junki Lee
104
+ Matthew Fernandez
105
+ Scott Moore
106
+ Wade Sparks III
107
+ and
108
+ City of Munich Open Source Sabbatical
109
+ VulnCheck
23
110
 
24
111
  Release 2.8.5 Tue September 22 2026
25
112
  Security fixes:
@@ -33,17 +120,6 @@ Release 2.8.5 Tue September 22 2026
33
120
  Upstream CVSS 3.1 vector:
34
121
  AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (CVSS score: 9.8)
35
122
 
36
- ///////////////////////////////////////////////////////////////////////////////
37
- // The next release will drop two (disabled-by-default) features: //
38
- // //
39
- // - ATTR_INFO (-DXML_ATTR_INFO, -DEXPAT_ATTR_INFO, --enable-xml-attr-info, //
40
- // function XML_GetAttributeInfo, struct XML_AttrInfo) //
41
- // - MIN_SIZE (-DXML_MIN_SIZE, -DEXPAT_MIN_SIZE) //
42
- // //
43
- // If you need them in 2026 and beyond, please share your scenario at //
44
- // GitHub issues #1370 (for ATTR_INFO) and/or #1379 (for MIN_SIZE). Thanks! //
45
- ///////////////////////////////////////////////////////////////////////////////
46
-
47
123
  Bug fixes:
48
124
  #1346 lib: Fix OOM-related memory leak on a failed overflow check
49
125
  #1371 lib: Fix memory alignment for architectures with 128bit
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@crossbind/port-expat-linux",
3
- "version": "2.0.0-beta.62",
4
- "nativeVersion": "2.8.5",
3
+ "version": "2.0.0-beta.63",
4
+ "nativeVersion": "2.9.0",
5
5
  "description": "Linux build of the precompiled Expat XML parser library, built with crossbind. Use it together with the main package @crossbind/port-expat.",
6
- "homepage": "https://github.com/crossbind/crossbind/tree/main/ports/expat#readme",
6
+ "homepage": "https://crossbind.dev/ports/expat/",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "https://github.com/crossbind/crossbind.git"
@@ -21,10 +21,10 @@
21
21
  "node-api"
22
22
  ],
23
23
  "dependencies": {
24
- "@crossbind/port-expat": "^2.0.0-beta.62"
24
+ "@crossbind/port-expat": "^2.0.0-beta.63"
25
25
  },
26
26
  "devDependencies": {
27
- "crossbind": "^2.0.0-beta.62"
27
+ "crossbind": "^2.0.0-beta.63"
28
28
  },
29
29
  "scripts": {
30
30
  "build": "crossbind build -p linux",