extlz4 0.3.3 → 0.3.5

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 (85) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/Rakefile +43 -3
  4. data/contrib/lz4/CODING_STYLE +57 -0
  5. data/contrib/lz4/LICENSE +3 -2
  6. data/contrib/lz4/Makefile.inc +56 -30
  7. data/contrib/lz4/NEWS +46 -0
  8. data/contrib/lz4/README.md +17 -6
  9. data/contrib/lz4/SECURITY.md +17 -0
  10. data/contrib/lz4/build/README.md +4 -15
  11. data/contrib/lz4/build/VS2022/_build.bat +39 -0
  12. data/contrib/lz4/build/VS2022/_setup.bat +35 -0
  13. data/contrib/lz4/build/VS2022/_test.bat +38 -0
  14. data/contrib/lz4/build/VS2022/build-and-test-win32-debug.bat +26 -0
  15. data/contrib/lz4/build/VS2022/build-and-test-win32-release.bat +26 -0
  16. data/contrib/lz4/build/VS2022/build-and-test-x64-debug.bat +26 -0
  17. data/contrib/lz4/build/VS2022/build-and-test-x64-release.bat +26 -0
  18. data/contrib/lz4/build/{VS2017 → VS2022}/datagen/datagen.vcxproj +11 -7
  19. data/contrib/lz4/build/{VS2017 → VS2022}/frametest/frametest.vcxproj +4 -4
  20. data/contrib/lz4/build/{VS2017 → VS2022}/fullbench/fullbench.vcxproj +4 -4
  21. data/contrib/lz4/build/{VS2017 → VS2022}/fullbench-dll/fullbench-dll.vcxproj +4 -4
  22. data/contrib/lz4/build/{VS2017 → VS2022}/fuzzer/fuzzer.vcxproj +4 -4
  23. data/contrib/lz4/build/{VS2017 → VS2022}/liblz4/liblz4.vcxproj +4 -4
  24. data/contrib/lz4/build/{VS2010 → VS2022}/liblz4-dll/liblz4-dll.rc +1 -1
  25. data/contrib/lz4/build/{VS2017 → VS2022}/liblz4-dll/liblz4-dll.vcxproj +4 -4
  26. data/contrib/lz4/build/{VS2010 → VS2022}/lz4/lz4.rc +1 -1
  27. data/contrib/lz4/build/{VS2017 → VS2022}/lz4/lz4.vcxproj +33 -8
  28. data/contrib/lz4/build/{VS2017 → VS2022}/lz4.sln +5 -2
  29. data/contrib/lz4/build/cmake/CMakeLists.txt +133 -100
  30. data/contrib/lz4/build/cmake/lz4Config.cmake.in +2 -0
  31. data/contrib/lz4/build/meson/GetLz4LibraryVersion.py +39 -0
  32. data/contrib/lz4/build/meson/README.md +34 -0
  33. data/contrib/lz4/build/meson/meson/contrib/gen_manual/meson.build +42 -0
  34. data/contrib/lz4/build/meson/meson/contrib/meson.build +11 -0
  35. data/contrib/lz4/build/meson/meson/examples/meson.build +32 -0
  36. data/contrib/lz4/build/meson/meson/lib/meson.build +87 -0
  37. data/contrib/lz4/build/meson/meson/meson.build +135 -0
  38. data/contrib/lz4/build/meson/meson/ossfuzz/meson.build +35 -0
  39. data/contrib/lz4/build/meson/meson/programs/meson.build +91 -0
  40. data/contrib/lz4/build/meson/meson/tests/meson.build +162 -0
  41. data/contrib/lz4/build/meson/meson.build +31 -0
  42. data/contrib/lz4/build/meson/meson_options.txt +44 -0
  43. data/contrib/lz4/build/visual/README.md +5 -0
  44. data/contrib/lz4/build/visual/generate_solution.cmd +55 -0
  45. data/contrib/lz4/build/visual/generate_vs2015.cmd +3 -0
  46. data/contrib/lz4/build/visual/generate_vs2017.cmd +3 -0
  47. data/contrib/lz4/build/visual/generate_vs2019.cmd +3 -0
  48. data/contrib/lz4/build/visual/generate_vs2022.cmd +3 -0
  49. data/contrib/lz4/lib/LICENSE +1 -1
  50. data/contrib/lz4/lib/README.md +69 -13
  51. data/contrib/lz4/lib/liblz4-dll.rc.in +1 -1
  52. data/contrib/lz4/lib/liblz4.pc.in +3 -3
  53. data/contrib/lz4/lib/lz4.c +608 -274
  54. data/contrib/lz4/lib/lz4.h +212 -102
  55. data/contrib/lz4/lib/lz4file.c +341 -0
  56. data/contrib/lz4/lib/lz4file.h +93 -0
  57. data/contrib/lz4/lib/lz4frame.c +545 -308
  58. data/contrib/lz4/lib/lz4frame.h +252 -124
  59. data/contrib/lz4/lib/lz4frame_static.h +1 -1
  60. data/contrib/lz4/lib/lz4hc.c +1038 -461
  61. data/contrib/lz4/lib/lz4hc.h +57 -56
  62. data/contrib/lz4/lib/xxhash.c +21 -21
  63. data/contrib/lz4/ossfuzz/Makefile +1 -0
  64. data/contrib/lz4/ossfuzz/decompress_fuzzer.c +18 -2
  65. data/contrib/lz4/ossfuzz/fuzz_helpers.h +4 -3
  66. data/contrib/lz4/ossfuzz/round_trip_frame_uncompressed_fuzzer.c +134 -0
  67. data/contrib/lz4/ossfuzz/round_trip_fuzzer.c +66 -6
  68. data/ext/blockapi.c +19 -19
  69. data/ext/extlz4.h +12 -0
  70. data/ext/frameapi.c +26 -26
  71. data/ext/hashargs.c +7 -1
  72. metadata +47 -30
  73. data/contrib/lz4/build/VS2010/datagen/datagen.vcxproj +0 -169
  74. data/contrib/lz4/build/VS2010/frametest/frametest.vcxproj +0 -176
  75. data/contrib/lz4/build/VS2010/fullbench/fullbench.vcxproj +0 -176
  76. data/contrib/lz4/build/VS2010/fullbench-dll/fullbench-dll.vcxproj +0 -180
  77. data/contrib/lz4/build/VS2010/fuzzer/fuzzer.vcxproj +0 -173
  78. data/contrib/lz4/build/VS2010/liblz4/liblz4.vcxproj +0 -175
  79. data/contrib/lz4/build/VS2010/liblz4-dll/liblz4-dll.vcxproj +0 -179
  80. data/contrib/lz4/build/VS2010/lz4/lz4.vcxproj +0 -189
  81. data/contrib/lz4/build/VS2010/lz4.sln +0 -98
  82. data/contrib/lz4/build/VS2017/liblz4-dll/liblz4-dll.rc +0 -51
  83. data/contrib/lz4/build/VS2017/lz4/lz4.rc +0 -51
  84. data/contrib/lz4/tmp +0 -0
  85. data/contrib/lz4/tmpsparse +0 -0
@@ -20,11 +20,16 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
20
20
 
21
21
  size_t const partialCapacity = FUZZ_getRange_from_uint32(partialCapacitySeed, 0, size);
22
22
  size_t const dstCapacity = LZ4_compressBound(size);
23
-
24
- char* const dst = (char*)malloc(dstCapacity);
23
+ size_t const largeSize = 64 * 1024 - 1;
24
+ size_t const smallSize = 1024;
25
+ char* const dstPlusLargePrefix = (char*)malloc(dstCapacity + largeSize);
26
+ FUZZ_ASSERT(dstPlusLargePrefix);
27
+ char* const dstPlusSmallPrefix = dstPlusLargePrefix + largeSize - smallSize;
28
+ char* const largeDict = (char*)malloc(largeSize);
29
+ FUZZ_ASSERT(largeDict);
30
+ char* const smallDict = largeDict + largeSize - smallSize;
31
+ char* const dst = dstPlusLargePrefix + largeSize;
25
32
  char* const rt = (char*)malloc(size);
26
-
27
- FUZZ_ASSERT(dst);
28
33
  FUZZ_ASSERT(rt);
29
34
 
30
35
  /* Compression must succeed and round trip correctly. */
@@ -47,9 +52,64 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
47
52
  FUZZ_ASSERT_MSG(!memcmp(data, partial, partialSize), "Corruption!");
48
53
  free(partial);
49
54
  }
55
+ /* Partial decompression using dict with no dict. */
56
+ {
57
+ char* const partial = (char*)malloc(partialCapacity);
58
+ FUZZ_ASSERT(partial);
59
+ int const partialSize = LZ4_decompress_safe_partial_usingDict(
60
+ dst, partial, dstSize, partialCapacity, partialCapacity, NULL, 0);
61
+ FUZZ_ASSERT(partialSize >= 0);
62
+ FUZZ_ASSERT_MSG(partialSize == partialCapacity, "Incorrect size");
63
+ FUZZ_ASSERT_MSG(!memcmp(data, partial, partialSize), "Corruption!");
64
+ free(partial);
65
+ }
66
+ /* Partial decompression using dict with small prefix as dict */
67
+ {
68
+ char* const partial = (char*)malloc(partialCapacity);
69
+ FUZZ_ASSERT(partial);
70
+ int const partialSize = LZ4_decompress_safe_partial_usingDict(
71
+ dst, partial, dstSize, partialCapacity, partialCapacity, dstPlusSmallPrefix, smallSize);
72
+ FUZZ_ASSERT(partialSize >= 0);
73
+ FUZZ_ASSERT_MSG(partialSize == partialCapacity, "Incorrect size");
74
+ FUZZ_ASSERT_MSG(!memcmp(data, partial, partialSize), "Corruption!");
75
+ free(partial);
76
+ }
77
+ /* Partial decompression using dict with large prefix as dict */
78
+ {
79
+ char* const partial = (char*)malloc(partialCapacity);
80
+ FUZZ_ASSERT(partial);
81
+ int const partialSize = LZ4_decompress_safe_partial_usingDict(
82
+ dst, partial, dstSize, partialCapacity, partialCapacity, dstPlusLargePrefix, largeSize);
83
+ FUZZ_ASSERT(partialSize >= 0);
84
+ FUZZ_ASSERT_MSG(partialSize == partialCapacity, "Incorrect size");
85
+ FUZZ_ASSERT_MSG(!memcmp(data, partial, partialSize), "Corruption!");
86
+ free(partial);
87
+ }
88
+ /* Partial decompression using dict with small external dict */
89
+ {
90
+ char* const partial = (char*)malloc(partialCapacity);
91
+ FUZZ_ASSERT(partial);
92
+ int const partialSize = LZ4_decompress_safe_partial_usingDict(
93
+ dst, partial, dstSize, partialCapacity, partialCapacity, smallDict, smallSize);
94
+ FUZZ_ASSERT(partialSize >= 0);
95
+ FUZZ_ASSERT_MSG(partialSize == partialCapacity, "Incorrect size");
96
+ FUZZ_ASSERT_MSG(!memcmp(data, partial, partialSize), "Corruption!");
97
+ free(partial);
98
+ }
99
+ /* Partial decompression using dict with large external dict */
100
+ {
101
+ char* const partial = (char*)malloc(partialCapacity);
102
+ FUZZ_ASSERT(partial);
103
+ int const partialSize = LZ4_decompress_safe_partial_usingDict(
104
+ dst, partial, dstSize, partialCapacity, partialCapacity, largeDict, largeSize);
105
+ FUZZ_ASSERT(partialSize >= 0);
106
+ FUZZ_ASSERT_MSG(partialSize == partialCapacity, "Incorrect size");
107
+ FUZZ_ASSERT_MSG(!memcmp(data, partial, partialSize), "Corruption!");
108
+ free(partial);
109
+ }
50
110
 
51
-
52
- free(dst);
111
+ free(dstPlusLargePrefix);
112
+ free(largeDict);
53
113
  free(rt);
54
114
  FUZZ_dataProducer_free(producer);
55
115
 
data/ext/blockapi.c CHANGED
@@ -188,7 +188,7 @@ aux_shouldbe_string(VALUE obj)
188
188
  static inline size_t
189
189
  aux_lz4_compressbound(VALUE src)
190
190
  {
191
- return LZ4_compressBound(RSTRING_LEN(src));
191
+ return LZ4_compressBound(rb_long2int(RSTRING_LEN(src)));
192
192
  }
193
193
 
194
194
  enum {
@@ -441,7 +441,7 @@ blkenc_setup(int argc, VALUE argv[], struct blockencoder *p, VALUE predict)
441
441
  * NOTE: すぐ下で LZ4_saveDict() を実行するため、
442
442
  * NOTE: p->predict のバッファ領域が保持されることはない。
443
443
  */
444
- p->traits->loaddict(p->context, RSTRING_PTR(p->predict), RSTRING_LEN(p->predict));
444
+ p->traits->loaddict(p->context, RSTRING_PTR(p->predict), rb_long2int(RSTRING_LEN(p->predict)));
445
445
  }
446
446
 
447
447
  p->prefixsize = p->traits->savedict(p->context, p->prefix, sizeof(p->prefix));
@@ -492,7 +492,7 @@ blkenc_update(int argc, VALUE argv[], VALUE enc)
492
492
  char *srcp;
493
493
  size_t srcsize;
494
494
  RSTRING_GETMEM(src, srcp, srcsize);
495
- int s = p->traits->update(p->context, srcp, RSTRING_PTR(dest), srcsize, maxsize, p->level);
495
+ int s = p->traits->update(p->context, srcp, RSTRING_PTR(dest), aux_size2int(srcsize), aux_size2int(maxsize), p->level);
496
496
  if (s <= 0) {
497
497
  rb_raise(extlz4_eError,
498
498
  "destsize too small (given destsize is %"PRIuSIZE")",
@@ -673,7 +673,7 @@ blkenc_s_encode(int argc, VALUE argv[], VALUE lz4)
673
673
  aux_str_reserve(dest, maxsize);
674
674
  rb_str_set_len(dest, 0);
675
675
 
676
- int size = encoder(RSTRING_PTR(src), RSTRING_PTR(dest), srcsize, maxsize, level);
676
+ int size = encoder(RSTRING_PTR(src), RSTRING_PTR(dest), aux_size2int(srcsize), aux_size2int(maxsize), level);
677
677
  if (size <= 0) {
678
678
  rb_raise(extlz4_eError,
679
679
  "failed LZ4 compress - maxsize is too small, or out of memory");
@@ -689,13 +689,13 @@ init_blockencoder(void)
689
689
  {
690
690
  VALUE cBlockEncoder = rb_define_class_under(extlz4_mLZ4, "BlockEncoder", rb_cObject);
691
691
  rb_define_alloc_func(cBlockEncoder, blkenc_alloc);
692
- rb_define_method(cBlockEncoder, "initialize", RUBY_METHOD_FUNC(blkenc_init), -1);
693
- rb_define_method(cBlockEncoder, "reset", RUBY_METHOD_FUNC(blkenc_reset), -1);
694
- rb_define_method(cBlockEncoder, "update", RUBY_METHOD_FUNC(blkenc_update), -1);
695
- rb_define_method(cBlockEncoder, "release", RUBY_METHOD_FUNC(blkenc_release), 0);
696
- rb_define_method(cBlockEncoder, "predict", RUBY_METHOD_FUNC(blkenc_predict), 0);
697
- rb_define_method(cBlockEncoder, "savedict", RUBY_METHOD_FUNC(blkenc_savedict), -1);
698
- rb_define_method(cBlockEncoder, "inspect", RUBY_METHOD_FUNC(blkenc_inspect), 0);
692
+ rb_define_method(cBlockEncoder, "initialize", blkenc_init, -1);
693
+ rb_define_method(cBlockEncoder, "reset", blkenc_reset, -1);
694
+ rb_define_method(cBlockEncoder, "update", blkenc_update, -1);
695
+ rb_define_method(cBlockEncoder, "release", blkenc_release, 0);
696
+ rb_define_method(cBlockEncoder, "predict", blkenc_predict, 0);
697
+ rb_define_method(cBlockEncoder, "savedict", blkenc_savedict, -1);
698
+ rb_define_method(cBlockEncoder, "inspect", blkenc_inspect, 0);
699
699
  rb_define_alias(cBlockEncoder, "encode", "update");
700
700
  rb_define_alias(cBlockEncoder, "compress", "update");
701
701
  rb_define_alias(cBlockEncoder, "free", "release");
@@ -870,8 +870,8 @@ blkdec_update(int argc, VALUE argv[], VALUE dec)
870
870
  const char *srcp;
871
871
  size_t srcsize;
872
872
  RSTRING_GETMEM(src, srcp, srcsize);
873
- LZ4_setStreamDecode(p->context, p->dictbuf, p->dictsize);
874
- int s = aux_LZ4_decompress_safe_continue(p->context, srcp, RSTRING_PTR(dest), srcsize, maxsize);
873
+ LZ4_setStreamDecode(p->context, p->dictbuf, aux_size2int(p->dictsize));
874
+ int s = aux_LZ4_decompress_safe_continue(p->context, srcp, RSTRING_PTR(dest), aux_size2int(srcsize), aux_size2int(maxsize));
875
875
  if (s < 0) {
876
876
  rb_raise(extlz4_eError,
877
877
  "`max_dest_size' too small, or corrupt lz4'd data");
@@ -879,7 +879,7 @@ blkdec_update(int argc, VALUE argv[], VALUE dec)
879
879
  rb_str_set_len(dest, s);
880
880
 
881
881
  /* copy prefix */
882
- if (s < sizeof(p->dictbuf)) {
882
+ if ((size_t)s < sizeof(p->dictbuf)) {
883
883
  ssize_t discard = (p->dictsize + s) - sizeof(p->dictbuf);
884
884
  if (discard > 0) {
885
885
  size_t remain = p->dictsize - discard;
@@ -967,7 +967,7 @@ blkdec_s_decode(int argc, VALUE argv[], VALUE lz4)
967
967
  aux_str_reserve(dest, maxsize);
968
968
  rb_str_set_len(dest, 0);
969
969
 
970
- int size = LZ4_decompress_safe(RSTRING_PTR(src), RSTRING_PTR(dest), RSTRING_LEN(src), maxsize);
970
+ int size = LZ4_decompress_safe(RSTRING_PTR(src), RSTRING_PTR(dest), rb_long2int(RSTRING_LEN(src)), aux_size2int(maxsize));
971
971
  if (size < 0) {
972
972
  rb_raise(extlz4_eError,
973
973
  "failed LZ4_decompress_safe - max_dest_size is too small, or data is corrupted");
@@ -983,10 +983,10 @@ init_blockdecoder(void)
983
983
  {
984
984
  VALUE cBlockDecoder = rb_define_class_under(extlz4_mLZ4, "BlockDecoder", rb_cObject);
985
985
  rb_define_alloc_func(cBlockDecoder, blkdec_alloc);
986
- rb_define_method(cBlockDecoder, "initialize", RUBY_METHOD_FUNC(blkdec_init), -1);
987
- rb_define_method(cBlockDecoder, "reset", RUBY_METHOD_FUNC(blkdec_reset), -1);
988
- rb_define_method(cBlockDecoder, "update", RUBY_METHOD_FUNC(blkdec_update), -1);
989
- rb_define_method(cBlockDecoder, "release", RUBY_METHOD_FUNC(blkdec_release), 0);
986
+ rb_define_method(cBlockDecoder, "initialize", blkdec_init, -1);
987
+ rb_define_method(cBlockDecoder, "reset", blkdec_reset, -1);
988
+ rb_define_method(cBlockDecoder, "update", blkdec_update, -1);
989
+ rb_define_method(cBlockDecoder, "release", blkdec_release, 0);
990
990
  rb_define_alias(cBlockDecoder, "decode", "update");
991
991
  rb_define_alias(cBlockDecoder, "decompress", "update");
992
992
  rb_define_alias(cBlockDecoder, "uncompress", "update");
data/ext/extlz4.h CHANGED
@@ -111,4 +111,16 @@ getref(VALUE obj, const rb_data_type_t *type)
111
111
  return checkref(obj, getrefp(obj, type));
112
112
  }
113
113
 
114
+ static inline int
115
+ aux_size2int(size_t n)
116
+ {
117
+ int m = (int)n;
118
+
119
+ if (m < 0 || (size_t)m != n) {
120
+ rb_raise(rb_eRangeError, "out of range integer conversion (size_t to int)");
121
+ }
122
+
123
+ return m;
124
+ }
125
+
114
126
  #endif /* !EXTLZ4_H */
data/ext/frameapi.c CHANGED
@@ -423,7 +423,7 @@ aux_read(VALUE obj, size_t size, VALUE buf)
423
423
  if (NIL_P(AUX_FUNCALL(obj, id_read, SIZET2NUM(size), buf))) {
424
424
  return Qnil;
425
425
  } else {
426
- if (RSTRING_LEN(buf) > size) {
426
+ if ((size_t)RSTRING_LEN(buf) > size) {
427
427
  rb_raise(rb_eRuntimeError, "most read (%d, but expected to %d)", (int)RSTRING_LEN(buf), (int)size);
428
428
  }
429
429
  return buf;
@@ -511,7 +511,7 @@ fdec_read_fetch(VALUE dec, struct decoder *p)
511
511
  rb_str_set_len(p->inbuf, 0);
512
512
  }
513
513
 
514
- while (RSTRING_LEN(p->inbuf) < p->status) {
514
+ while ((size_t)RSTRING_LEN(p->inbuf) < p->status) {
515
515
  p->readbuf = aux_read(p->inport, p->status - RSTRING_LEN(p->inbuf), p->readbuf);
516
516
  if (NIL_P(p->readbuf)) {
517
517
  rb_raise(rb_eRuntimeError,
@@ -547,7 +547,7 @@ fdec_read_decode(VALUE dec, struct decoder *p, char *dest, size_t size)
547
547
  break;
548
548
  }
549
549
 
550
- if (p->status > 0 && p->outoff >= RSTRING_LEN(p->outbuf)) {
550
+ if (p->status > 0 && p->outoff >= (size_t)RSTRING_LEN(p->outbuf)) {
551
551
  fdec_read_fetch(dec, p);
552
552
  }
553
553
 
@@ -737,33 +737,33 @@ extlz4_init_frameapi(void)
737
737
 
738
738
  VALUE cEncoder = rb_define_class_under(extlz4_mLZ4, "Encoder", rb_cObject);
739
739
  rb_define_alloc_func(cEncoder, fenc_alloc);
740
- rb_define_method(cEncoder, "initialize", RUBY_METHOD_FUNC(fenc_init), -1);
741
- rb_define_method(cEncoder, "write", RUBY_METHOD_FUNC(fenc_write), -1);
742
- rb_define_method(cEncoder, "<<", RUBY_METHOD_FUNC(fenc_push), 1);
743
- rb_define_method(cEncoder, "flush", RUBY_METHOD_FUNC(fenc_flush), 0);
744
- rb_define_method(cEncoder, "close", RUBY_METHOD_FUNC(fenc_close), 0);
740
+ rb_define_method(cEncoder, "initialize", fenc_init, -1);
741
+ rb_define_method(cEncoder, "write", fenc_write, -1);
742
+ rb_define_method(cEncoder, "<<", fenc_push, 1);
743
+ rb_define_method(cEncoder, "flush", fenc_flush, 0);
744
+ rb_define_method(cEncoder, "close", fenc_close, 0);
745
745
  rb_define_alias(cEncoder, "finish", "close");
746
- rb_define_method(cEncoder, "outport", RUBY_METHOD_FUNC(fenc_getoutport), 0);
747
- rb_define_method(cEncoder, "outport=", RUBY_METHOD_FUNC(fenc_setoutport), 1);
748
- rb_define_method(cEncoder, "prefs_level", RUBY_METHOD_FUNC(fenc_prefs_level), 0);
749
- rb_define_method(cEncoder, "prefs_blocksize", RUBY_METHOD_FUNC(fenc_prefs_blocksize), 0);
750
- rb_define_method(cEncoder, "prefs_blocklink", RUBY_METHOD_FUNC(fenc_prefs_blocklink), 0);
751
- rb_define_method(cEncoder, "prefs_checksum", RUBY_METHOD_FUNC(fenc_prefs_checksum), 0);
752
- rb_define_method(cEncoder, "inspect", RUBY_METHOD_FUNC(fenc_inspect), 0);
746
+ rb_define_method(cEncoder, "outport", fenc_getoutport, 0);
747
+ rb_define_method(cEncoder, "outport=", fenc_setoutport, 1);
748
+ rb_define_method(cEncoder, "prefs_level", fenc_prefs_level, 0);
749
+ rb_define_method(cEncoder, "prefs_blocksize", fenc_prefs_blocksize, 0);
750
+ rb_define_method(cEncoder, "prefs_blocklink", fenc_prefs_blocklink, 0);
751
+ rb_define_method(cEncoder, "prefs_checksum", fenc_prefs_checksum, 0);
752
+ rb_define_method(cEncoder, "inspect", fenc_inspect, 0);
753
753
 
754
754
  VALUE cDecoder = rb_define_class_under(extlz4_mLZ4, "Decoder", rb_cObject);
755
755
  rb_define_alloc_func(cDecoder, fdec_alloc);
756
- rb_define_method(cDecoder, "initialize", RUBY_METHOD_FUNC(fdec_init), -1);
757
- rb_define_method(cDecoder, "read", RUBY_METHOD_FUNC(fdec_read), -1);
758
- rb_define_method(cDecoder, "getc", RUBY_METHOD_FUNC(fdec_getc), 0);
759
- rb_define_method(cDecoder, "getbyte", RUBY_METHOD_FUNC(fdec_getbyte), 0);
760
- rb_define_method(cDecoder, "close", RUBY_METHOD_FUNC(fdec_close), 0);
756
+ rb_define_method(cDecoder, "initialize", fdec_init, -1);
757
+ rb_define_method(cDecoder, "read", fdec_read, -1);
758
+ rb_define_method(cDecoder, "getc", fdec_getc, 0);
759
+ rb_define_method(cDecoder, "getbyte", fdec_getbyte, 0);
760
+ rb_define_method(cDecoder, "close", fdec_close, 0);
761
761
  rb_define_alias(cDecoder, "finish", "close");
762
- rb_define_method(cDecoder, "eof", RUBY_METHOD_FUNC(fdec_eof), 0);
763
- rb_define_method(cDecoder, "inport", RUBY_METHOD_FUNC(fdec_inport), 0);
762
+ rb_define_method(cDecoder, "eof", fdec_eof, 0);
763
+ rb_define_method(cDecoder, "inport", fdec_inport, 0);
764
764
  rb_define_alias(cDecoder, "eof?", "eof");
765
- rb_define_method(cDecoder, "prefs_blocksize", RUBY_METHOD_FUNC(fdec_prefs_blocksize), 0);
766
- rb_define_method(cDecoder, "prefs_blocklink", RUBY_METHOD_FUNC(fdec_prefs_blocklink), 0);
767
- rb_define_method(cDecoder, "prefs_checksum", RUBY_METHOD_FUNC(fdec_prefs_checksum), 0);
768
- rb_define_method(cDecoder, "inspect", RUBY_METHOD_FUNC(fdec_inspect), 0);
765
+ rb_define_method(cDecoder, "prefs_blocksize", fdec_prefs_blocksize, 0);
766
+ rb_define_method(cDecoder, "prefs_blocklink", fdec_prefs_blocklink, 0);
767
+ rb_define_method(cDecoder, "prefs_checksum", fdec_prefs_checksum, 0);
768
+ rb_define_method(cDecoder, "inspect", fdec_inspect, 0);
769
769
  }
data/ext/hashargs.c CHANGED
@@ -11,6 +11,12 @@
11
11
 
12
12
  #include "hashargs.h"
13
13
 
14
+ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
15
+ # define aux_noreturn _Noreturn
16
+ #else
17
+ # define aux_noreturn
18
+ #endif
19
+
14
20
  struct rbx_scanhash_args
15
21
  {
16
22
  struct rbx_scanhash_arg *args;
@@ -18,7 +24,7 @@ struct rbx_scanhash_args
18
24
  VALUE rest;
19
25
  };
20
26
 
21
- static void
27
+ aux_noreturn static void
22
28
  rbx_scanhash_error(ID given, struct rbx_scanhash_arg *args, const struct rbx_scanhash_arg *end)
23
29
  {
24
30
  // 引数の数が㌧でもない数の場合、よくないことが起きそう。
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: extlz4
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - dearblue
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2022-10-05 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rake
@@ -53,6 +52,8 @@ extra_rdoc_files:
53
52
  - contrib/lz4/LICENSE
54
53
  - contrib/lz4/README.md
55
54
  - contrib/lz4/build/README.md
55
+ - contrib/lz4/build/meson/README.md
56
+ - contrib/lz4/build/visual/README.md
56
57
  - contrib/lz4/lib/LICENSE
57
58
  - contrib/lz4/lib/README.md
58
59
  - ext/blockapi.c
@@ -72,41 +73,60 @@ files:
72
73
  - README.md
73
74
  - Rakefile
74
75
  - bin/extlz4
76
+ - contrib/lz4/CODING_STYLE
75
77
  - contrib/lz4/INSTALL
76
78
  - contrib/lz4/LICENSE
77
79
  - contrib/lz4/Makefile.inc
78
80
  - contrib/lz4/NEWS
79
81
  - contrib/lz4/README.md
82
+ - contrib/lz4/SECURITY.md
80
83
  - contrib/lz4/build/README.md
81
- - contrib/lz4/build/VS2010/datagen/datagen.vcxproj
82
- - contrib/lz4/build/VS2010/frametest/frametest.vcxproj
83
- - contrib/lz4/build/VS2010/fullbench-dll/fullbench-dll.vcxproj
84
- - contrib/lz4/build/VS2010/fullbench/fullbench.vcxproj
85
- - contrib/lz4/build/VS2010/fuzzer/fuzzer.vcxproj
86
- - contrib/lz4/build/VS2010/liblz4-dll/liblz4-dll.rc
87
- - contrib/lz4/build/VS2010/liblz4-dll/liblz4-dll.vcxproj
88
- - contrib/lz4/build/VS2010/liblz4/liblz4.vcxproj
89
- - contrib/lz4/build/VS2010/lz4.sln
90
- - contrib/lz4/build/VS2010/lz4/lz4.rc
91
- - contrib/lz4/build/VS2010/lz4/lz4.vcxproj
92
- - contrib/lz4/build/VS2017/datagen/datagen.vcxproj
93
- - contrib/lz4/build/VS2017/frametest/frametest.vcxproj
94
- - contrib/lz4/build/VS2017/fullbench-dll/fullbench-dll.vcxproj
95
- - contrib/lz4/build/VS2017/fullbench/fullbench.vcxproj
96
- - contrib/lz4/build/VS2017/fuzzer/fuzzer.vcxproj
97
- - contrib/lz4/build/VS2017/liblz4-dll/liblz4-dll.rc
98
- - contrib/lz4/build/VS2017/liblz4-dll/liblz4-dll.vcxproj
99
- - contrib/lz4/build/VS2017/liblz4/liblz4.vcxproj
100
- - contrib/lz4/build/VS2017/lz4.sln
101
- - contrib/lz4/build/VS2017/lz4/lz4.rc
102
- - contrib/lz4/build/VS2017/lz4/lz4.vcxproj
84
+ - contrib/lz4/build/VS2022/_build.bat
85
+ - contrib/lz4/build/VS2022/_setup.bat
86
+ - contrib/lz4/build/VS2022/_test.bat
87
+ - contrib/lz4/build/VS2022/build-and-test-win32-debug.bat
88
+ - contrib/lz4/build/VS2022/build-and-test-win32-release.bat
89
+ - contrib/lz4/build/VS2022/build-and-test-x64-debug.bat
90
+ - contrib/lz4/build/VS2022/build-and-test-x64-release.bat
91
+ - contrib/lz4/build/VS2022/datagen/datagen.vcxproj
92
+ - contrib/lz4/build/VS2022/frametest/frametest.vcxproj
93
+ - contrib/lz4/build/VS2022/fullbench-dll/fullbench-dll.vcxproj
94
+ - contrib/lz4/build/VS2022/fullbench/fullbench.vcxproj
95
+ - contrib/lz4/build/VS2022/fuzzer/fuzzer.vcxproj
96
+ - contrib/lz4/build/VS2022/liblz4-dll/liblz4-dll.rc
97
+ - contrib/lz4/build/VS2022/liblz4-dll/liblz4-dll.vcxproj
98
+ - contrib/lz4/build/VS2022/liblz4/liblz4.vcxproj
99
+ - contrib/lz4/build/VS2022/lz4.sln
100
+ - contrib/lz4/build/VS2022/lz4/lz4.rc
101
+ - contrib/lz4/build/VS2022/lz4/lz4.vcxproj
103
102
  - contrib/lz4/build/cmake/CMakeLists.txt
103
+ - contrib/lz4/build/cmake/lz4Config.cmake.in
104
+ - contrib/lz4/build/meson/GetLz4LibraryVersion.py
105
+ - contrib/lz4/build/meson/README.md
106
+ - contrib/lz4/build/meson/meson.build
107
+ - contrib/lz4/build/meson/meson/contrib/gen_manual/meson.build
108
+ - contrib/lz4/build/meson/meson/contrib/meson.build
109
+ - contrib/lz4/build/meson/meson/examples/meson.build
110
+ - contrib/lz4/build/meson/meson/lib/meson.build
111
+ - contrib/lz4/build/meson/meson/meson.build
112
+ - contrib/lz4/build/meson/meson/ossfuzz/meson.build
113
+ - contrib/lz4/build/meson/meson/programs/meson.build
114
+ - contrib/lz4/build/meson/meson/tests/meson.build
115
+ - contrib/lz4/build/meson/meson_options.txt
116
+ - contrib/lz4/build/visual/README.md
117
+ - contrib/lz4/build/visual/generate_solution.cmd
118
+ - contrib/lz4/build/visual/generate_vs2015.cmd
119
+ - contrib/lz4/build/visual/generate_vs2017.cmd
120
+ - contrib/lz4/build/visual/generate_vs2019.cmd
121
+ - contrib/lz4/build/visual/generate_vs2022.cmd
104
122
  - contrib/lz4/lib/LICENSE
105
123
  - contrib/lz4/lib/README.md
106
124
  - contrib/lz4/lib/liblz4-dll.rc.in
107
125
  - contrib/lz4/lib/liblz4.pc.in
108
126
  - contrib/lz4/lib/lz4.c
109
127
  - contrib/lz4/lib/lz4.h
128
+ - contrib/lz4/lib/lz4file.c
129
+ - contrib/lz4/lib/lz4file.h
110
130
  - contrib/lz4/lib/lz4frame.c
111
131
  - contrib/lz4/lib/lz4frame.h
112
132
  - contrib/lz4/lib/lz4frame_static.h
@@ -128,13 +148,12 @@ files:
128
148
  - contrib/lz4/ossfuzz/lz4_helpers.h
129
149
  - contrib/lz4/ossfuzz/ossfuzz.sh
130
150
  - contrib/lz4/ossfuzz/round_trip_frame_fuzzer.c
151
+ - contrib/lz4/ossfuzz/round_trip_frame_uncompressed_fuzzer.c
131
152
  - contrib/lz4/ossfuzz/round_trip_fuzzer.c
132
153
  - contrib/lz4/ossfuzz/round_trip_hc_fuzzer.c
133
154
  - contrib/lz4/ossfuzz/round_trip_stream_fuzzer.c
134
155
  - contrib/lz4/ossfuzz/standaloneengine.c
135
156
  - contrib/lz4/ossfuzz/travisoss.sh
136
- - contrib/lz4/tmp
137
- - contrib/lz4/tmpsparse
138
157
  - examples/frameapi.rb
139
158
  - ext/blockapi.c
140
159
  - ext/depend
@@ -157,7 +176,6 @@ homepage: https://github.com/dearblue/ruby-extlz4
157
176
  licenses:
158
177
  - BSD-2-Clause
159
178
  metadata: {}
160
- post_install_message:
161
179
  rdoc_options:
162
180
  - "--charset"
163
181
  - UTF-8
@@ -176,8 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
194
  - !ruby/object:Gem::Version
177
195
  version: '0'
178
196
  requirements: []
179
- rubygems_version: 3.3.7
180
- signing_key:
197
+ rubygems_version: 3.6.8
181
198
  specification_version: 4
182
199
  summary: ruby bindings for LZ4
183
200
  test_files: []
@@ -1,169 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
- <ItemGroup Label="ProjectConfigurations">
4
- <ProjectConfiguration Include="Debug|Win32">
5
- <Configuration>Debug</Configuration>
6
- <Platform>Win32</Platform>
7
- </ProjectConfiguration>
8
- <ProjectConfiguration Include="Debug|x64">
9
- <Configuration>Debug</Configuration>
10
- <Platform>x64</Platform>
11
- </ProjectConfiguration>
12
- <ProjectConfiguration Include="Release|Win32">
13
- <Configuration>Release</Configuration>
14
- <Platform>Win32</Platform>
15
- </ProjectConfiguration>
16
- <ProjectConfiguration Include="Release|x64">
17
- <Configuration>Release</Configuration>
18
- <Platform>x64</Platform>
19
- </ProjectConfiguration>
20
- </ItemGroup>
21
- <PropertyGroup Label="Globals">
22
- <ProjectGuid>{D745AE2F-596A-403A-9B91-81A8C6779243}</ProjectGuid>
23
- <Keyword>Win32Proj</Keyword>
24
- <RootNamespace>datagen</RootNamespace>
25
- <OutDir>$(SolutionDir)bin\$(Platform)_$(Configuration)\</OutDir>
26
- <IntDir>$(SolutionDir)bin\obj\$(RootNamespace)_$(Platform)_$(Configuration)\</IntDir>
27
- </PropertyGroup>
28
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
29
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
30
- <ConfigurationType>Application</ConfigurationType>
31
- <UseDebugLibraries>true</UseDebugLibraries>
32
- <CharacterSet>Unicode</CharacterSet>
33
- </PropertyGroup>
34
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
35
- <ConfigurationType>Application</ConfigurationType>
36
- <UseDebugLibraries>true</UseDebugLibraries>
37
- <CharacterSet>Unicode</CharacterSet>
38
- </PropertyGroup>
39
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
40
- <ConfigurationType>Application</ConfigurationType>
41
- <UseDebugLibraries>false</UseDebugLibraries>
42
- <CharacterSet>Unicode</CharacterSet>
43
- <WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
44
- </PropertyGroup>
45
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
46
- <ConfigurationType>Application</ConfigurationType>
47
- <UseDebugLibraries>false</UseDebugLibraries>
48
- <CharacterSet>Unicode</CharacterSet>
49
- <WholeProgramOptimization Condition="'$(EnableWholeProgramOptimization)'=='true'">true</WholeProgramOptimization>
50
- </PropertyGroup>
51
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
52
- <ImportGroup Label="ExtensionSettings">
53
- </ImportGroup>
54
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
55
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
56
- </ImportGroup>
57
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
58
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
59
- </ImportGroup>
60
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
61
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
62
- </ImportGroup>
63
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
64
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
65
- </ImportGroup>
66
- <PropertyGroup Label="UserMacros" />
67
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
68
- <LinkIncremental>true</LinkIncremental>
69
- <IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\programs;$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
70
- </PropertyGroup>
71
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
72
- <LinkIncremental>true</LinkIncremental>
73
- <IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\programs;$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
74
- <RunCodeAnalysis>true</RunCodeAnalysis>
75
- </PropertyGroup>
76
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
77
- <LinkIncremental>false</LinkIncremental>
78
- <IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\programs;$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
79
- </PropertyGroup>
80
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
81
- <LinkIncremental>false</LinkIncremental>
82
- <IncludePath>$(IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)..\..\programs;$(SolutionDir)..\..\lib;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);</IncludePath>
83
- <RunCodeAnalysis>true</RunCodeAnalysis>
84
- </PropertyGroup>
85
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
86
- <ClCompile>
87
- <PrecompiledHeader>
88
- </PrecompiledHeader>
89
- <WarningLevel>Level4</WarningLevel>
90
- <Optimization>Disabled</Optimization>
91
- <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
92
- <TreatWarningAsError>true</TreatWarningAsError>
93
- <EnablePREfast>false</EnablePREfast>
94
- <RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
95
- </ClCompile>
96
- <Link>
97
- <SubSystem>Console</SubSystem>
98
- <GenerateDebugInformation>true</GenerateDebugInformation>
99
- </Link>
100
- </ItemDefinitionGroup>
101
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
102
- <ClCompile>
103
- <PrecompiledHeader>
104
- </PrecompiledHeader>
105
- <WarningLevel>Level4</WarningLevel>
106
- <Optimization>Disabled</Optimization>
107
- <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
108
- <TreatWarningAsError>true</TreatWarningAsError>
109
- <EnablePREfast>true</EnablePREfast>
110
- <AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
111
- <RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreadedDebug</RuntimeLibrary>
112
- </ClCompile>
113
- <Link>
114
- <SubSystem>Console</SubSystem>
115
- <GenerateDebugInformation>true</GenerateDebugInformation>
116
- </Link>
117
- </ItemDefinitionGroup>
118
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
119
- <ClCompile>
120
- <WarningLevel>Level4</WarningLevel>
121
- <PrecompiledHeader>
122
- </PrecompiledHeader>
123
- <Optimization>MaxSpeed</Optimization>
124
- <FunctionLevelLinking>true</FunctionLevelLinking>
125
- <IntrinsicFunctions>true</IntrinsicFunctions>
126
- <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
127
- <TreatWarningAsError>false</TreatWarningAsError>
128
- <EnablePREfast>false</EnablePREfast>
129
- <RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
130
- </ClCompile>
131
- <Link>
132
- <SubSystem>Console</SubSystem>
133
- <GenerateDebugInformation>true</GenerateDebugInformation>
134
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
135
- <OptimizeReferences>true</OptimizeReferences>
136
- </Link>
137
- </ItemDefinitionGroup>
138
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
139
- <ClCompile>
140
- <WarningLevel>Level4</WarningLevel>
141
- <PrecompiledHeader>
142
- </PrecompiledHeader>
143
- <Optimization>MaxSpeed</Optimization>
144
- <FunctionLevelLinking>true</FunctionLevelLinking>
145
- <IntrinsicFunctions>true</IntrinsicFunctions>
146
- <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
147
- <TreatWarningAsError>false</TreatWarningAsError>
148
- <EnablePREfast>true</EnablePREfast>
149
- <AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
150
- <RuntimeLibrary Condition="'$(UseStaticCRT)'=='true'">MultiThreaded</RuntimeLibrary>
151
- </ClCompile>
152
- <Link>
153
- <SubSystem>Console</SubSystem>
154
- <GenerateDebugInformation>true</GenerateDebugInformation>
155
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
156
- <OptimizeReferences>true</OptimizeReferences>
157
- </Link>
158
- </ItemDefinitionGroup>
159
- <ItemGroup>
160
- <ClCompile Include="..\..\..\programs\datagen.c" />
161
- <ClCompile Include="..\..\..\tests\datagencli.c" />
162
- </ItemGroup>
163
- <ItemGroup>
164
- <ClInclude Include="..\..\..\programs\datagen.h" />
165
- </ItemGroup>
166
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
167
- <ImportGroup Label="ExtensionTargets">
168
- </ImportGroup>
169
- </Project>