protocol-http2 0.14.1 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (572) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/protocol/http2/client.rb +4 -23
  4. data/lib/protocol/http2/connection.rb +32 -52
  5. data/lib/protocol/http2/continuation_frame.rb +9 -20
  6. data/lib/protocol/http2/data_frame.rb +5 -21
  7. data/lib/protocol/http2/dependency.rb +9 -24
  8. data/lib/protocol/http2/error.rb +10 -25
  9. data/lib/protocol/http2/flow_controlled.rb +5 -19
  10. data/lib/protocol/http2/frame.rb +23 -28
  11. data/lib/protocol/http2/framer.rb +8 -24
  12. data/lib/protocol/http2/goaway_frame.rb +4 -19
  13. data/lib/protocol/http2/headers_frame.rb +5 -20
  14. data/lib/protocol/http2/padded.rb +5 -21
  15. data/lib/protocol/http2/ping_frame.rb +12 -19
  16. data/lib/protocol/http2/priority_frame.rb +4 -23
  17. data/lib/protocol/http2/push_promise_frame.rb +4 -19
  18. data/lib/protocol/http2/reset_stream_frame.rb +4 -19
  19. data/lib/protocol/http2/server.rb +5 -20
  20. data/lib/protocol/http2/settings_frame.rb +22 -34
  21. data/lib/protocol/http2/stream.rb +11 -23
  22. data/lib/protocol/http2/version.rb +5 -20
  23. data/lib/protocol/http2/window_update_frame.rb +23 -26
  24. data/lib/protocol/http2.rb +4 -19
  25. data/license.md +24 -0
  26. data/{examples/http2/request.rb → readme.md} +41 -7
  27. data.tar.gz.sig +3 -0
  28. metadata +44 -554
  29. metadata.gz.sig +0 -0
  30. data/.github/workflows/development.yml +0 -44
  31. data/examples/http2/requests.rb +0 -56
  32. data/fuzz/framer/bake.rb +0 -16
  33. data/fuzz/framer/input/data.txt +0 -0
  34. data/fuzz/framer/output/.cur_input +0 -0
  35. data/fuzz/framer/output/crashes/README.txt +0 -17
  36. data/fuzz/framer/output/crashes/id:000000,sig:10,src:000007,op:havoc,rep:32 +0 -0
  37. data/fuzz/framer/output/crashes/id:000001,sig:10,src:000015,op:arith8,pos:2,val:-11 +0 -0
  38. data/fuzz/framer/output/crashes/id:000002,sig:10,src:000020,op:int32,pos:3,val:+100663045 +0 -0
  39. data/fuzz/framer/output/crashes/id:000003,sig:10,src:000020,op:int32,pos:12,val:+100663045 +0 -0
  40. data/fuzz/framer/output/crashes/id:000004,sig:10,src:000022,op:int32,pos:21,val:+100663045 +0 -0
  41. data/fuzz/framer/output/crashes/id:000005,sig:10,src:000022,op:havoc,rep:4 +0 -0
  42. data/fuzz/framer/output/crashes/id:000006,sig:10,src:000028,op:int32,pos:25,val:+100663045 +0 -0
  43. data/fuzz/framer/output/crashes/id:000007,sig:10,src:000048,op:flip1,pos:13 +0 -0
  44. data/fuzz/framer/output/crashes/id:000008,sig:10,src:000050,op:havoc,rep:16 +0 -0
  45. data/fuzz/framer/output/crashes/id:000009,sig:10,src:000053,op:havoc,rep:4 +0 -0
  46. data/fuzz/framer/output/crashes/id:000010,sig:10,src:000060,op:int32,pos:16,val:+100663045 +0 -0
  47. data/fuzz/framer/output/crashes/id:000011,sig:10,src:000034,op:int32,pos:12,val:+100663045 +0 -0
  48. data/fuzz/framer/output/crashes/id:000012,sig:10,src:000051,op:havoc,rep:4 +0 -0
  49. data/fuzz/framer/output/crashes/id:000013,sig:10,src:000079,op:havoc,rep:4 +0 -0
  50. data/fuzz/framer/output/crashes/id:000014,sig:10,src:000083,op:int32,pos:66,val:+100663045 +0 -0
  51. data/fuzz/framer/output/crashes/id:000015,sig:10,src:000083,op:int32,pos:804,val:+100663045 +0 -0
  52. data/fuzz/framer/output/crashes/id:000016,sig:10,src:000083,op:int32,pos:1182,val:+100663045 +0 -0
  53. data/fuzz/framer/output/crashes/id:000017,sig:10,src:000082,op:int32,pos:2313,val:+100663045 +0 -0
  54. data/fuzz/framer/output/crashes/id:000018,sig:10,src:000082,op:int32,pos:2322,val:+100663045 +0 -0
  55. data/fuzz/framer/output/crashes/id:000019,sig:10,src:000082,op:int32,pos:2340,val:+100663045 +0 -0
  56. data/fuzz/framer/output/crashes/id:000020,sig:10,src:000026+000088,op:splice,rep:4 +0 -0
  57. data/fuzz/framer/output/fuzz_bitmap +0 -0
  58. data/fuzz/framer/output/fuzzer_stats +0 -30
  59. data/fuzz/framer/output/plot_data +0 -455
  60. data/fuzz/framer/output/queue/.state/auto_extras/auto_000000 +0 -0
  61. data/fuzz/framer/output/queue/.state/auto_extras/auto_000001 +0 -0
  62. data/fuzz/framer/output/queue/.state/auto_extras/auto_000002 +0 -1
  63. data/fuzz/framer/output/queue/.state/auto_extras/auto_000003 +0 -0
  64. data/fuzz/framer/output/queue/.state/auto_extras/auto_000004 +0 -0
  65. data/fuzz/framer/output/queue/.state/auto_extras/auto_000005 +0 -0
  66. data/fuzz/framer/output/queue/.state/auto_extras/auto_000006 +0 -0
  67. data/fuzz/framer/output/queue/.state/auto_extras/auto_000007 +0 -0
  68. data/fuzz/framer/output/queue/.state/auto_extras/auto_000008 +0 -0
  69. data/fuzz/framer/output/queue/.state/auto_extras/auto_000009 +0 -0
  70. data/fuzz/framer/output/queue/.state/auto_extras/auto_000010 +0 -1
  71. data/fuzz/framer/output/queue/.state/auto_extras/auto_000011 +0 -1
  72. data/fuzz/framer/output/queue/.state/auto_extras/auto_000012 +0 -0
  73. data/fuzz/framer/output/queue/.state/auto_extras/auto_000013 +0 -0
  74. data/fuzz/framer/output/queue/.state/auto_extras/auto_000014 +0 -0
  75. data/fuzz/framer/output/queue/.state/auto_extras/auto_000015 +0 -0
  76. data/fuzz/framer/output/queue/.state/auto_extras/auto_000016 +0 -0
  77. data/fuzz/framer/output/queue/.state/auto_extras/auto_000017 +0 -0
  78. data/fuzz/framer/output/queue/.state/auto_extras/auto_000018 +0 -0
  79. data/fuzz/framer/output/queue/.state/auto_extras/auto_000019 +0 -0
  80. data/fuzz/framer/output/queue/.state/auto_extras/auto_000020 +0 -1
  81. data/fuzz/framer/output/queue/.state/auto_extras/auto_000021 +0 -0
  82. data/fuzz/framer/output/queue/.state/auto_extras/auto_000022 +0 -0
  83. data/fuzz/framer/output/queue/.state/auto_extras/auto_000023 +0 -0
  84. data/fuzz/framer/output/queue/.state/auto_extras/auto_000024 +0 -1
  85. data/fuzz/framer/output/queue/.state/auto_extras/auto_000025 +0 -1
  86. data/fuzz/framer/output/queue/.state/auto_extras/auto_000026 +0 -0
  87. data/fuzz/framer/output/queue/.state/auto_extras/auto_000027 +0 -0
  88. data/fuzz/framer/output/queue/.state/auto_extras/auto_000028 +0 -0
  89. data/fuzz/framer/output/queue/.state/auto_extras/auto_000029 +0 -0
  90. data/fuzz/framer/output/queue/.state/auto_extras/auto_000030 +0 -0
  91. data/fuzz/framer/output/queue/.state/auto_extras/auto_000031 +0 -1
  92. data/fuzz/framer/output/queue/.state/auto_extras/auto_000032 +0 -1
  93. data/fuzz/framer/output/queue/.state/auto_extras/auto_000033 +0 -0
  94. data/fuzz/framer/output/queue/.state/auto_extras/auto_000034 +0 -1
  95. data/fuzz/framer/output/queue/.state/auto_extras/auto_000035 +0 -0
  96. data/fuzz/framer/output/queue/.state/auto_extras/auto_000036 +0 -1
  97. data/fuzz/framer/output/queue/.state/auto_extras/auto_000037 +0 -1
  98. data/fuzz/framer/output/queue/.state/auto_extras/auto_000038 +0 -0
  99. data/fuzz/framer/output/queue/.state/auto_extras/auto_000039 +0 -0
  100. data/fuzz/framer/output/queue/.state/auto_extras/auto_000040 +0 -0
  101. data/fuzz/framer/output/queue/.state/auto_extras/auto_000041 +0 -0
  102. data/fuzz/framer/output/queue/.state/auto_extras/auto_000042 +0 -0
  103. data/fuzz/framer/output/queue/.state/auto_extras/auto_000043 +0 -0
  104. data/fuzz/framer/output/queue/.state/auto_extras/auto_000044 +0 -0
  105. data/fuzz/framer/output/queue/.state/auto_extras/auto_000045 +0 -0
  106. data/fuzz/framer/output/queue/.state/auto_extras/auto_000046 +0 -0
  107. data/fuzz/framer/output/queue/.state/auto_extras/auto_000047 +0 -0
  108. data/fuzz/framer/output/queue/.state/auto_extras/auto_000048 +0 -0
  109. data/fuzz/framer/output/queue/.state/auto_extras/auto_000049 +0 -0
  110. data/fuzz/framer/output/queue/.state/deterministic_done/id:000000,orig:data.txt +0 -0
  111. data/fuzz/framer/output/queue/.state/deterministic_done/id:000001,src:000000,op:flip1,pos:0,+cov +0 -0
  112. data/fuzz/framer/output/queue/.state/deterministic_done/id:000002,src:000000,op:flip1,pos:2,+cov +0 -0
  113. data/fuzz/framer/output/queue/.state/deterministic_done/id:000003,src:000000,op:flip1,pos:3,+cov +0 -0
  114. data/fuzz/framer/output/queue/.state/deterministic_done/id:000004,src:000000,op:flip1,pos:3,+cov +0 -0
  115. data/fuzz/framer/output/queue/.state/deterministic_done/id:000005,src:000000,op:flip1,pos:3,+cov +0 -0
  116. data/fuzz/framer/output/queue/.state/deterministic_done/id:000006,src:000000,op:flip1,pos:3,+cov +0 -0
  117. data/fuzz/framer/output/queue/.state/deterministic_done/id:000007,src:000000,op:flip1,pos:3,+cov +0 -0
  118. data/fuzz/framer/output/queue/.state/deterministic_done/id:000008,src:000000,op:flip2,pos:3,+cov +0 -0
  119. data/fuzz/framer/output/queue/.state/deterministic_done/id:000009,src:000000,op:flip2,pos:3,+cov +0 -0
  120. data/fuzz/framer/output/queue/.state/deterministic_done/id:000010,src:000000,op:flip4,pos:3,+cov +0 -0
  121. data/fuzz/framer/output/queue/.state/deterministic_done/id:000011,src:000000,op:arith8,pos:2,val:-9 +0 -0
  122. data/fuzz/framer/output/queue/.state/deterministic_done/id:000012,src:000000,op:int16,pos:2,val:+256,+cov +0 -0
  123. data/fuzz/framer/output/queue/.state/deterministic_done/id:000013,src:000000,op:int16,pos:2,val:+1024,+cov +0 -0
  124. data/fuzz/framer/output/queue/.state/deterministic_done/id:000014,src:000000,op:int32,pos:0,val:+100663045 +0 -0
  125. data/fuzz/framer/output/queue/.state/deterministic_done/id:000015,src:000000,op:int32,pos:3,val:+100663045,+cov +0 -0
  126. data/fuzz/framer/output/queue/.state/deterministic_done/id:000016,src:000000,op:havoc,rep:32 +0 -0
  127. data/fuzz/framer/output/queue/.state/deterministic_done/id:000017,src:000000,op:havoc,rep:2 +0 -0
  128. data/fuzz/framer/output/queue/.state/deterministic_done/id:000018,src:000000,op:havoc,rep:32 +0 -0
  129. data/fuzz/framer/output/queue/.state/deterministic_done/id:000019,src:000000,op:havoc,rep:32 +0 -0
  130. data/fuzz/framer/output/queue/.state/deterministic_done/id:000020,src:000000,op:havoc,rep:64,+cov +0 -0
  131. data/fuzz/framer/output/queue/.state/deterministic_done/id:000021,src:000000,op:havoc,rep:128 +0 -0
  132. data/fuzz/framer/output/queue/.state/deterministic_done/id:000022,src:000000,op:havoc,rep:32,+cov +0 -0
  133. data/fuzz/framer/output/queue/.state/deterministic_done/id:000023,src:000000,op:havoc,rep:8 +0 -0
  134. data/fuzz/framer/output/queue/.state/deterministic_done/id:000024,src:000000,op:havoc,rep:2 +0 -0
  135. data/fuzz/framer/output/queue/.state/deterministic_done/id:000025,src:000000,op:havoc,rep:8,+cov +0 -0
  136. data/fuzz/framer/output/queue/.state/deterministic_done/id:000026,src:000000,op:havoc,rep:16,+cov +0 -0
  137. data/fuzz/framer/output/queue/.state/deterministic_done/id:000027,src:000000,op:havoc,rep:64 +0 -0
  138. data/fuzz/framer/output/queue/.state/deterministic_done/id:000028,src:000000,op:havoc,rep:64,+cov +0 -0
  139. data/fuzz/framer/output/queue/.state/deterministic_done/id:000029,src:000000,op:havoc,rep:32 +0 -0
  140. data/fuzz/framer/output/queue/.state/deterministic_done/id:000030,src:000004,op:flip4,pos:2,+cov +0 -0
  141. data/fuzz/framer/output/queue/.state/deterministic_done/id:000031,src:000005,op:flip1,pos:4,+cov +0 -0
  142. data/fuzz/framer/output/queue/.state/deterministic_done/id:000032,src:000005,op:arith8,pos:2,val:-5,+cov +0 -0
  143. data/fuzz/framer/output/queue/.state/deterministic_done/id:000033,src:000006,op:arith8,pos:2,val:-6,+cov +0 -0
  144. data/fuzz/framer/output/queue/.state/deterministic_done/id:000034,src:000007,op:havoc,rep:16 +0 -0
  145. data/fuzz/framer/output/queue/.state/deterministic_done/id:000035,src:000008,op:flip2,pos:2,+cov +0 -0
  146. data/fuzz/framer/output/queue/.state/deterministic_done/id:000036,src:000009,op:flip4,pos:2,+cov +0 -0
  147. data/fuzz/framer/output/queue/.state/deterministic_done/id:000037,src:000022,op:flip1,pos:21 +0 -0
  148. data/fuzz/framer/output/queue/.state/deterministic_done/id:000038,src:000022,op:havoc,rep:8 +0 -0
  149. data/fuzz/framer/output/queue/.state/deterministic_done/id:000039,src:000026,op:havoc,rep:2,+cov +0 -0
  150. data/fuzz/framer/output/queue/.state/deterministic_done/id:000040,src:000026,op:havoc,rep:2 +0 -0
  151. data/fuzz/framer/output/queue/.state/deterministic_done/id:000041,src:000026,op:havoc,rep:8,+cov +0 -0
  152. data/fuzz/framer/output/queue/.state/deterministic_done/id:000042,src:000032,op:havoc,rep:4 +0 -0
  153. data/fuzz/framer/output/queue/.state/deterministic_done/id:000043,src:000033,op:havoc,rep:8 +0 -0
  154. data/fuzz/framer/output/queue/.state/deterministic_done/id:000044,src:000035,op:havoc,rep:2 +0 -0
  155. data/fuzz/framer/output/queue/.state/deterministic_done/id:000045,src:000036,op:havoc,rep:4 +0 -0
  156. data/fuzz/framer/output/queue/.state/deterministic_done/id:000046,src:000036,op:havoc,rep:2 +0 -0
  157. data/fuzz/framer/output/queue/.state/deterministic_done/id:000047,src:000039,op:int32,pos:17,val:+0 +0 -0
  158. data/fuzz/framer/output/queue/.state/deterministic_done/id:000048,src:000025,op:havoc,rep:2 +0 -0
  159. data/fuzz/framer/output/queue/.state/deterministic_done/id:000049,src:000030,op:havoc,rep:16 +0 -0
  160. data/fuzz/framer/output/queue/.state/deterministic_done/id:000050,src:000030,op:havoc,rep:4 +0 -0
  161. data/fuzz/framer/output/queue/.state/deterministic_done/id:000051,src:000048,op:arith8,pos:21,val:-23 +0 -0
  162. data/fuzz/framer/output/queue/.state/deterministic_done/id:000052,src:000048,op:int32,pos:18,val:be:+1 +0 -0
  163. data/fuzz/framer/output/queue/.state/deterministic_done/id:000053,src:000048,op:havoc,rep:2 +0 -0
  164. data/fuzz/framer/output/queue/.state/deterministic_done/id:000054,src:000048,op:havoc,rep:4 +0 -0
  165. data/fuzz/framer/output/queue/.state/deterministic_done/id:000055,src:000048,op:havoc,rep:2 +0 -0
  166. data/fuzz/framer/output/queue/.state/deterministic_done/id:000056,src:000052,op:havoc,rep:2 +0 -0
  167. data/fuzz/framer/output/queue/.state/deterministic_done/id:000057,src:000054,op:havoc,rep:4 +0 -0
  168. data/fuzz/framer/output/queue/.state/deterministic_done/id:000058,src:000019,op:havoc,rep:4 +0 -0
  169. data/fuzz/framer/output/queue/.state/deterministic_done/id:000059,src:000046,op:arith8,pos:29,val:-29 +0 -0
  170. data/fuzz/framer/output/queue/.state/deterministic_done/id:000060,src:000046,op:havoc,rep:4 +0 -0
  171. data/fuzz/framer/output/queue/.state/deterministic_done/id:000061,src:000050,op:flip4,pos:29 +0 -0
  172. data/fuzz/framer/output/queue/.state/deterministic_done/id:000062,src:000050,op:havoc,rep:2 +0 -0
  173. data/fuzz/framer/output/queue/.state/deterministic_done/id:000063,src:000050,op:havoc,rep:4 +0 -0
  174. data/fuzz/framer/output/queue/.state/deterministic_done/id:000064,src:000060,op:havoc,rep:2 +0 -0
  175. data/fuzz/framer/output/queue/.state/deterministic_done/id:000065,src:000034,op:flip1,pos:17 +0 -0
  176. data/fuzz/framer/output/queue/.state/deterministic_done/id:000066,src:000034,op:flip2,pos:2,+cov +0 -0
  177. data/fuzz/framer/output/queue/.state/deterministic_done/id:000067,src:000066,op:havoc,rep:8 +0 -0
  178. data/fuzz/framer/output/queue/.state/deterministic_done/id:000068,src:000066,op:havoc,rep:8 +0 -0
  179. data/fuzz/framer/output/queue/.state/deterministic_done/id:000069,src:000066,op:havoc,rep:2 +0 -0
  180. data/fuzz/framer/output/queue/.state/deterministic_done/id:000070,src:000066,op:havoc,rep:4 +0 -0
  181. data/fuzz/framer/output/queue/.state/deterministic_done/id:000071,src:000070,op:flip4,pos:2 +0 -0
  182. data/fuzz/framer/output/queue/.state/deterministic_done/id:000072,src:000070,op:havoc,rep:4 +0 -0
  183. data/fuzz/framer/output/queue/.state/deterministic_done/id:000073,src:000040,op:flip1,pos:4,+cov +0 -0
  184. data/fuzz/framer/output/queue/.state/deterministic_done/id:000074,src:000040,op:havoc,rep:2 +0 -0
  185. data/fuzz/framer/output/queue/.state/deterministic_done/id:000075,src:000073,op:flip2,pos:3,+cov +0 -0
  186. data/fuzz/framer/output/queue/.state/deterministic_done/id:000076,src:000073,op:havoc,rep:4 +0 -0
  187. data/fuzz/framer/output/queue/.state/deterministic_done/id:000077,src:000075,op:flip1,pos:4,+cov +0 -0
  188. data/fuzz/framer/output/queue/.state/deterministic_done/id:000078,src:000075,op:flip1,pos:9,+cov +0 -0
  189. data/fuzz/framer/output/queue/.state/deterministic_done/id:000079,src:000043,op:int16,pos:14,val:+0 +0 -0
  190. data/fuzz/framer/output/queue/.state/deterministic_done/id:000080,src:000068,op:arith8,pos:2,val:+6 +0 -0
  191. data/fuzz/framer/output/queue/.state/deterministic_done/id:000081,src:000068,op:havoc,rep:4 +0 -0
  192. data/fuzz/framer/output/queue/.state/deterministic_done/id:000082,src:000072,op:havoc,rep:4 +0 -0
  193. data/fuzz/framer/output/queue/.state/deterministic_done/id:000083,src:000072,op:havoc,rep:2 +0 -0
  194. data/fuzz/framer/output/queue/.state/deterministic_done/id:000084,src:000072,op:havoc,rep:2 +0 -0
  195. data/fuzz/framer/output/queue/.state/deterministic_done/id:000085,src:000072,op:havoc,rep:2 +0 -0
  196. data/fuzz/framer/output/queue/.state/deterministic_done/id:000086,src:000072,op:havoc,rep:32 +0 -0
  197. data/fuzz/framer/output/queue/.state/deterministic_done/id:000087,src:000072,op:havoc,rep:32 +0 -0
  198. data/fuzz/framer/output/queue/.state/deterministic_done/id:000088,src:000072,op:havoc,rep:8 +0 -0
  199. data/fuzz/framer/output/queue/.state/deterministic_done/id:000089,src:000079,op:havoc,rep:8 +0 -0
  200. data/fuzz/framer/output/queue/.state/deterministic_done/id:000090,src:000079,op:havoc,rep:2 +0 -0
  201. data/fuzz/framer/output/queue/.state/deterministic_done/id:000091,src:000079,op:havoc,rep:2 +0 -0
  202. data/fuzz/framer/output/queue/.state/deterministic_done/id:000092,src:000083,op:flip2,pos:1 +0 -0
  203. data/fuzz/framer/output/queue/.state/deterministic_done/id:000093,src:000083,op:flip2,pos:2 +0 -0
  204. data/fuzz/framer/output/queue/.state/deterministic_done/id:000094,src:000010,op:havoc,rep:16 +0 -0
  205. data/fuzz/framer/output/queue/.state/deterministic_done/id:000095,src:000044,op:havoc,rep:4 +0 -0
  206. data/fuzz/framer/output/queue/.state/deterministic_done/id:000096,src:000044,op:havoc,rep:2 +0 -0
  207. data/fuzz/framer/output/queue/.state/deterministic_done/id:000097,src:000044,op:havoc,rep:2 +0 -0
  208. data/fuzz/framer/output/queue/.state/deterministic_done/id:000098,src:000047,op:havoc,rep:2 +0 -0
  209. data/fuzz/framer/output/queue/.state/deterministic_done/id:000099,src:000047,op:havoc,rep:2 +0 -0
  210. data/fuzz/framer/output/queue/.state/deterministic_done/id:000100,src:000047,op:havoc,rep:4 +0 -0
  211. data/fuzz/framer/output/queue/.state/deterministic_done/id:000101,src:000076,op:flip2,pos:22,+cov +0 -0
  212. data/fuzz/framer/output/queue/.state/deterministic_done/id:000102,src:000065,op:havoc,rep:2 +0 -0
  213. data/fuzz/framer/output/queue/.state/deterministic_done/id:000103,src:000082,op:havoc,rep:16 +0 -0
  214. data/fuzz/framer/output/queue/.state/deterministic_done/id:000104,src:000102,op:havoc,rep:2 +0 -0
  215. data/fuzz/framer/output/queue/.state/deterministic_done/id:000105,src:000056,op:flip1,pos:3 +0 -0
  216. data/fuzz/framer/output/queue/.state/deterministic_done/id:000106,src:000104,op:havoc,rep:2 +0 -0
  217. data/fuzz/framer/output/queue/.state/deterministic_done/id:000107,src:000100,op:flip1,pos:38 +0 -0
  218. data/fuzz/framer/output/queue/.state/deterministic_done/id:000108,src:000100,op:flip2,pos:38 +0 -0
  219. data/fuzz/framer/output/queue/.state/deterministic_done/id:000109,src:000100,op:arith8,pos:38,val:+5 +0 -0
  220. data/fuzz/framer/output/queue/.state/deterministic_done/id:000110,src:000103,op:havoc,rep:8 +0 -0
  221. data/fuzz/framer/output/queue/.state/deterministic_done/id:000111,src:000074,op:havoc,rep:2 +0 -0
  222. data/fuzz/framer/output/queue/.state/deterministic_done/id:000112,src:000028,op:havoc,rep:4 +0 -0
  223. data/fuzz/framer/output/queue/.state/deterministic_done/id:000113,src:000105,op:havoc,rep:2 +0 -0
  224. data/fuzz/framer/output/queue/.state/deterministic_done/id:000114,src:000112,op:havoc,rep:4 +0 -0
  225. data/fuzz/framer/output/queue/.state/deterministic_done/id:000115,src:000112,op:havoc,rep:4 +0 -0
  226. data/fuzz/framer/output/queue/.state/deterministic_done/id:000116,src:000101,op:havoc,rep:2 +0 -0
  227. data/fuzz/framer/output/queue/.state/deterministic_done/id:000117,src:000094,op:flip1,pos:22 +0 -0
  228. data/fuzz/framer/output/queue/.state/deterministic_done/id:000118,src:000094,op:arith8,pos:2,val:+24 +0 -0
  229. data/fuzz/framer/output/queue/.state/deterministic_done/id:000119,src:000101,op:havoc,rep:4 +0 -0
  230. data/fuzz/framer/output/queue/.state/deterministic_done/id:000120,src:000078+000117,op:splice,rep:2,+cov +0 -0
  231. data/fuzz/framer/output/queue/.state/deterministic_done/id:000121,src:000120,op:flip1,pos:41 +0 -0
  232. data/fuzz/framer/output/queue/.state/deterministic_done/id:000122,src:000120,op:havoc,rep:4 +0 -0
  233. data/fuzz/framer/output/queue/.state/deterministic_done/id:000123,src:000120,op:havoc,rep:4 +0 -0
  234. data/fuzz/framer/output/queue/.state/deterministic_done/id:000124,src:000119,op:havoc,rep:2 +0 -0
  235. data/fuzz/framer/output/queue/.state/deterministic_done/id:000125,src:000123,op:flip2,pos:77 +0 -0
  236. data/fuzz/framer/output/queue/.state/deterministic_done/id:000126,src:000123,op:havoc,rep:4 +0 -0
  237. data/fuzz/framer/output/queue/.state/deterministic_done/id:000127,src:000123,op:havoc,rep:2 +0 -0
  238. data/fuzz/framer/output/queue/.state/deterministic_done/id:000128,src:000124,op:havoc,rep:4 +0 -0
  239. data/fuzz/framer/output/queue/.state/deterministic_done/id:000129,src:000128,op:havoc,rep:4 +0 -0
  240. data/fuzz/framer/output/queue/.state/deterministic_done/id:000130,src:000127,op:flip1,pos:132 +0 -0
  241. data/fuzz/framer/output/queue/.state/deterministic_done/id:000131,src:000127,op:flip2,pos:151 +0 -0
  242. data/fuzz/framer/output/queue/.state/deterministic_done/id:000132,src:000130,op:havoc,rep:4 +0 -0
  243. data/fuzz/framer/output/queue/.state/deterministic_done/id:000133,src:000130,op:havoc,rep:8 +0 -0
  244. data/fuzz/framer/output/queue/.state/deterministic_done/id:000134,src:000130,op:havoc,rep:2 +0 -0
  245. data/fuzz/framer/output/queue/.state/deterministic_done/id:000135,src:000134,op:flip1,pos:58 +0 -0
  246. data/fuzz/framer/output/queue/.state/deterministic_done/id:000136,src:000135,op:havoc,rep:2 +0 -0
  247. data/fuzz/framer/output/queue/.state/deterministic_done/id:000137,src:000135,op:havoc,rep:2 +0 -0
  248. data/fuzz/framer/output/queue/.state/deterministic_done/id:000138,src:000132,op:havoc,rep:8 +0 -0
  249. data/fuzz/framer/output/queue/.state/deterministic_done/id:000139,src:000120+000138,op:splice,rep:2 +0 -0
  250. data/fuzz/framer/output/queue/.state/deterministic_done/id:000140,src:000139,op:flip1,pos:661 +0 -0
  251. data/fuzz/framer/output/queue/.state/deterministic_done/id:000141,src:000139,op:havoc,rep:2 +0 -0
  252. data/fuzz/framer/output/queue/.state/redundant_edges/id:000000,orig:data.txt +0 -0
  253. data/fuzz/framer/output/queue/.state/redundant_edges/id:000001,src:000000,op:flip1,pos:0,+cov +0 -0
  254. data/fuzz/framer/output/queue/.state/redundant_edges/id:000002,src:000000,op:flip1,pos:2,+cov +0 -0
  255. data/fuzz/framer/output/queue/.state/redundant_edges/id:000011,src:000000,op:arith8,pos:2,val:-9 +0 -0
  256. data/fuzz/framer/output/queue/.state/redundant_edges/id:000016,src:000000,op:havoc,rep:32 +0 -0
  257. data/fuzz/framer/output/queue/.state/redundant_edges/id:000017,src:000000,op:havoc,rep:2 +0 -0
  258. data/fuzz/framer/output/queue/.state/redundant_edges/id:000018,src:000000,op:havoc,rep:32 +0 -0
  259. data/fuzz/framer/output/queue/.state/redundant_edges/id:000019,src:000000,op:havoc,rep:32 +0 -0
  260. data/fuzz/framer/output/queue/.state/redundant_edges/id:000020,src:000000,op:havoc,rep:64,+cov +0 -0
  261. data/fuzz/framer/output/queue/.state/redundant_edges/id:000021,src:000000,op:havoc,rep:128 +0 -0
  262. data/fuzz/framer/output/queue/.state/redundant_edges/id:000022,src:000000,op:havoc,rep:32,+cov +0 -0
  263. data/fuzz/framer/output/queue/.state/redundant_edges/id:000023,src:000000,op:havoc,rep:8 +0 -0
  264. data/fuzz/framer/output/queue/.state/redundant_edges/id:000024,src:000000,op:havoc,rep:2 +0 -0
  265. data/fuzz/framer/output/queue/.state/redundant_edges/id:000025,src:000000,op:havoc,rep:8,+cov +0 -0
  266. data/fuzz/framer/output/queue/.state/redundant_edges/id:000027,src:000000,op:havoc,rep:64 +0 -0
  267. data/fuzz/framer/output/queue/.state/redundant_edges/id:000029,src:000000,op:havoc,rep:32 +0 -0
  268. data/fuzz/framer/output/queue/.state/redundant_edges/id:000032,src:000005,op:arith8,pos:2,val:-5,+cov +0 -0
  269. data/fuzz/framer/output/queue/.state/redundant_edges/id:000037,src:000022,op:flip1,pos:21 +0 -0
  270. data/fuzz/framer/output/queue/.state/redundant_edges/id:000038,src:000022,op:havoc,rep:8 +0 -0
  271. data/fuzz/framer/output/queue/.state/redundant_edges/id:000040,src:000026,op:havoc,rep:2 +0 -0
  272. data/fuzz/framer/output/queue/.state/redundant_edges/id:000042,src:000032,op:havoc,rep:4 +0 -0
  273. data/fuzz/framer/output/queue/.state/redundant_edges/id:000043,src:000033,op:havoc,rep:8 +0 -0
  274. data/fuzz/framer/output/queue/.state/redundant_edges/id:000044,src:000035,op:havoc,rep:2 +0 -0
  275. data/fuzz/framer/output/queue/.state/redundant_edges/id:000045,src:000036,op:havoc,rep:4 +0 -0
  276. data/fuzz/framer/output/queue/.state/redundant_edges/id:000046,src:000036,op:havoc,rep:2 +0 -0
  277. data/fuzz/framer/output/queue/.state/redundant_edges/id:000047,src:000039,op:int32,pos:17,val:+0 +0 -0
  278. data/fuzz/framer/output/queue/.state/redundant_edges/id:000048,src:000025,op:havoc,rep:2 +0 -0
  279. data/fuzz/framer/output/queue/.state/redundant_edges/id:000049,src:000030,op:havoc,rep:16 +0 -0
  280. data/fuzz/framer/output/queue/.state/redundant_edges/id:000050,src:000030,op:havoc,rep:4 +0 -0
  281. data/fuzz/framer/output/queue/.state/redundant_edges/id:000051,src:000048,op:arith8,pos:21,val:-23 +0 -0
  282. data/fuzz/framer/output/queue/.state/redundant_edges/id:000053,src:000048,op:havoc,rep:2 +0 -0
  283. data/fuzz/framer/output/queue/.state/redundant_edges/id:000054,src:000048,op:havoc,rep:4 +0 -0
  284. data/fuzz/framer/output/queue/.state/redundant_edges/id:000055,src:000048,op:havoc,rep:2 +0 -0
  285. data/fuzz/framer/output/queue/.state/redundant_edges/id:000056,src:000052,op:havoc,rep:2 +0 -0
  286. data/fuzz/framer/output/queue/.state/redundant_edges/id:000057,src:000054,op:havoc,rep:4 +0 -0
  287. data/fuzz/framer/output/queue/.state/redundant_edges/id:000058,src:000019,op:havoc,rep:4 +0 -0
  288. data/fuzz/framer/output/queue/.state/redundant_edges/id:000059,src:000046,op:arith8,pos:29,val:-29 +0 -0
  289. data/fuzz/framer/output/queue/.state/redundant_edges/id:000060,src:000046,op:havoc,rep:4 +0 -0
  290. data/fuzz/framer/output/queue/.state/redundant_edges/id:000061,src:000050,op:flip4,pos:29 +0 -0
  291. data/fuzz/framer/output/queue/.state/redundant_edges/id:000062,src:000050,op:havoc,rep:2 +0 -0
  292. data/fuzz/framer/output/queue/.state/redundant_edges/id:000063,src:000050,op:havoc,rep:4 +0 -0
  293. data/fuzz/framer/output/queue/.state/redundant_edges/id:000064,src:000060,op:havoc,rep:2 +0 -0
  294. data/fuzz/framer/output/queue/.state/redundant_edges/id:000067,src:000066,op:havoc,rep:8 +0 -0
  295. data/fuzz/framer/output/queue/.state/redundant_edges/id:000068,src:000066,op:havoc,rep:8 +0 -0
  296. data/fuzz/framer/output/queue/.state/redundant_edges/id:000069,src:000066,op:havoc,rep:2 +0 -0
  297. data/fuzz/framer/output/queue/.state/redundant_edges/id:000070,src:000066,op:havoc,rep:4 +0 -0
  298. data/fuzz/framer/output/queue/.state/redundant_edges/id:000071,src:000070,op:flip4,pos:2 +0 -0
  299. data/fuzz/framer/output/queue/.state/redundant_edges/id:000072,src:000070,op:havoc,rep:4 +0 -0
  300. data/fuzz/framer/output/queue/.state/redundant_edges/id:000073,src:000040,op:flip1,pos:4,+cov +0 -0
  301. data/fuzz/framer/output/queue/.state/redundant_edges/id:000074,src:000040,op:havoc,rep:2 +0 -0
  302. data/fuzz/framer/output/queue/.state/redundant_edges/id:000075,src:000073,op:flip2,pos:3,+cov +0 -0
  303. data/fuzz/framer/output/queue/.state/redundant_edges/id:000076,src:000073,op:havoc,rep:4 +0 -0
  304. data/fuzz/framer/output/queue/.state/redundant_edges/id:000078,src:000075,op:flip1,pos:9,+cov +0 -0
  305. data/fuzz/framer/output/queue/.state/redundant_edges/id:000079,src:000043,op:int16,pos:14,val:+0 +0 -0
  306. data/fuzz/framer/output/queue/.state/redundant_edges/id:000080,src:000068,op:arith8,pos:2,val:+6 +0 -0
  307. data/fuzz/framer/output/queue/.state/redundant_edges/id:000081,src:000068,op:havoc,rep:4 +0 -0
  308. data/fuzz/framer/output/queue/.state/redundant_edges/id:000082,src:000072,op:havoc,rep:4 +0 -0
  309. data/fuzz/framer/output/queue/.state/redundant_edges/id:000083,src:000072,op:havoc,rep:2 +0 -0
  310. data/fuzz/framer/output/queue/.state/redundant_edges/id:000084,src:000072,op:havoc,rep:2 +0 -0
  311. data/fuzz/framer/output/queue/.state/redundant_edges/id:000085,src:000072,op:havoc,rep:2 +0 -0
  312. data/fuzz/framer/output/queue/.state/redundant_edges/id:000086,src:000072,op:havoc,rep:32 +0 -0
  313. data/fuzz/framer/output/queue/.state/redundant_edges/id:000087,src:000072,op:havoc,rep:32 +0 -0
  314. data/fuzz/framer/output/queue/.state/redundant_edges/id:000088,src:000072,op:havoc,rep:8 +0 -0
  315. data/fuzz/framer/output/queue/.state/redundant_edges/id:000089,src:000079,op:havoc,rep:8 +0 -0
  316. data/fuzz/framer/output/queue/.state/redundant_edges/id:000090,src:000079,op:havoc,rep:2 +0 -0
  317. data/fuzz/framer/output/queue/.state/redundant_edges/id:000091,src:000079,op:havoc,rep:2 +0 -0
  318. data/fuzz/framer/output/queue/.state/redundant_edges/id:000092,src:000083,op:flip2,pos:1 +0 -0
  319. data/fuzz/framer/output/queue/.state/redundant_edges/id:000093,src:000083,op:flip2,pos:2 +0 -0
  320. data/fuzz/framer/output/queue/.state/redundant_edges/id:000094,src:000010,op:havoc,rep:16 +0 -0
  321. data/fuzz/framer/output/queue/.state/redundant_edges/id:000095,src:000044,op:havoc,rep:4 +0 -0
  322. data/fuzz/framer/output/queue/.state/redundant_edges/id:000096,src:000044,op:havoc,rep:2 +0 -0
  323. data/fuzz/framer/output/queue/.state/redundant_edges/id:000097,src:000044,op:havoc,rep:2 +0 -0
  324. data/fuzz/framer/output/queue/.state/redundant_edges/id:000098,src:000047,op:havoc,rep:2 +0 -0
  325. data/fuzz/framer/output/queue/.state/redundant_edges/id:000099,src:000047,op:havoc,rep:2 +0 -0
  326. data/fuzz/framer/output/queue/.state/redundant_edges/id:000100,src:000047,op:havoc,rep:4 +0 -0
  327. data/fuzz/framer/output/queue/.state/redundant_edges/id:000101,src:000076,op:flip2,pos:22,+cov +0 -0
  328. data/fuzz/framer/output/queue/.state/redundant_edges/id:000102,src:000065,op:havoc,rep:2 +0 -0
  329. data/fuzz/framer/output/queue/.state/redundant_edges/id:000103,src:000082,op:havoc,rep:16 +0 -0
  330. data/fuzz/framer/output/queue/.state/redundant_edges/id:000104,src:000102,op:havoc,rep:2 +0 -0
  331. data/fuzz/framer/output/queue/.state/redundant_edges/id:000105,src:000056,op:flip1,pos:3 +0 -0
  332. data/fuzz/framer/output/queue/.state/redundant_edges/id:000106,src:000104,op:havoc,rep:2 +0 -0
  333. data/fuzz/framer/output/queue/.state/redundant_edges/id:000107,src:000100,op:flip1,pos:38 +0 -0
  334. data/fuzz/framer/output/queue/.state/redundant_edges/id:000108,src:000100,op:flip2,pos:38 +0 -0
  335. data/fuzz/framer/output/queue/.state/redundant_edges/id:000109,src:000100,op:arith8,pos:38,val:+5 +0 -0
  336. data/fuzz/framer/output/queue/.state/redundant_edges/id:000110,src:000103,op:havoc,rep:8 +0 -0
  337. data/fuzz/framer/output/queue/.state/redundant_edges/id:000111,src:000074,op:havoc,rep:2 +0 -0
  338. data/fuzz/framer/output/queue/.state/redundant_edges/id:000112,src:000028,op:havoc,rep:4 +0 -0
  339. data/fuzz/framer/output/queue/.state/redundant_edges/id:000113,src:000105,op:havoc,rep:2 +0 -0
  340. data/fuzz/framer/output/queue/.state/redundant_edges/id:000114,src:000112,op:havoc,rep:4 +0 -0
  341. data/fuzz/framer/output/queue/.state/redundant_edges/id:000115,src:000112,op:havoc,rep:4 +0 -0
  342. data/fuzz/framer/output/queue/.state/redundant_edges/id:000116,src:000101,op:havoc,rep:2 +0 -0
  343. data/fuzz/framer/output/queue/.state/redundant_edges/id:000117,src:000094,op:flip1,pos:22 +0 -0
  344. data/fuzz/framer/output/queue/.state/redundant_edges/id:000118,src:000094,op:arith8,pos:2,val:+24 +0 -0
  345. data/fuzz/framer/output/queue/.state/redundant_edges/id:000119,src:000101,op:havoc,rep:4 +0 -0
  346. data/fuzz/framer/output/queue/.state/redundant_edges/id:000121,src:000120,op:flip1,pos:41 +0 -0
  347. data/fuzz/framer/output/queue/.state/variable_behavior/id:000000,orig:data.txt +0 -1
  348. data/fuzz/framer/output/queue/.state/variable_behavior/id:000002,src:000000,op:flip1,pos:2,+cov +0 -1
  349. data/fuzz/framer/output/queue/.state/variable_behavior/id:000004,src:000000,op:flip1,pos:3,+cov +0 -1
  350. data/fuzz/framer/output/queue/.state/variable_behavior/id:000007,src:000000,op:flip1,pos:3,+cov +0 -1
  351. data/fuzz/framer/output/queue/.state/variable_behavior/id:000008,src:000000,op:flip2,pos:3,+cov +0 -1
  352. data/fuzz/framer/output/queue/.state/variable_behavior/id:000012,src:000000,op:int16,pos:2,val:+256,+cov +0 -1
  353. data/fuzz/framer/output/queue/.state/variable_behavior/id:000013,src:000000,op:int16,pos:2,val:+1024,+cov +0 -1
  354. data/fuzz/framer/output/queue/.state/variable_behavior/id:000015,src:000000,op:int32,pos:3,val:+100663045,+cov +0 -1
  355. data/fuzz/framer/output/queue/.state/variable_behavior/id:000016,src:000000,op:havoc,rep:32 +0 -1
  356. data/fuzz/framer/output/queue/.state/variable_behavior/id:000017,src:000000,op:havoc,rep:2 +0 -1
  357. data/fuzz/framer/output/queue/.state/variable_behavior/id:000018,src:000000,op:havoc,rep:32 +0 -1
  358. data/fuzz/framer/output/queue/.state/variable_behavior/id:000020,src:000000,op:havoc,rep:64,+cov +0 -1
  359. data/fuzz/framer/output/queue/.state/variable_behavior/id:000022,src:000000,op:havoc,rep:32,+cov +0 -1
  360. data/fuzz/framer/output/queue/.state/variable_behavior/id:000025,src:000000,op:havoc,rep:8,+cov +0 -1
  361. data/fuzz/framer/output/queue/.state/variable_behavior/id:000026,src:000000,op:havoc,rep:16,+cov +0 -1
  362. data/fuzz/framer/output/queue/.state/variable_behavior/id:000030,src:000004,op:flip4,pos:2,+cov +0 -1
  363. data/fuzz/framer/output/queue/.state/variable_behavior/id:000032,src:000005,op:arith8,pos:2,val:-5,+cov +0 -1
  364. data/fuzz/framer/output/queue/.state/variable_behavior/id:000033,src:000006,op:arith8,pos:2,val:-6,+cov +0 -1
  365. data/fuzz/framer/output/queue/.state/variable_behavior/id:000034,src:000007,op:havoc,rep:16 +0 -1
  366. data/fuzz/framer/output/queue/.state/variable_behavior/id:000035,src:000008,op:flip2,pos:2,+cov +0 -1
  367. data/fuzz/framer/output/queue/.state/variable_behavior/id:000036,src:000009,op:flip4,pos:2,+cov +0 -1
  368. data/fuzz/framer/output/queue/.state/variable_behavior/id:000037,src:000022,op:flip1,pos:21 +0 -1
  369. data/fuzz/framer/output/queue/.state/variable_behavior/id:000040,src:000026,op:havoc,rep:2 +0 -1
  370. data/fuzz/framer/output/queue/.state/variable_behavior/id:000041,src:000026,op:havoc,rep:8,+cov +0 -1
  371. data/fuzz/framer/output/queue/.state/variable_behavior/id:000043,src:000033,op:havoc,rep:8 +0 -1
  372. data/fuzz/framer/output/queue/.state/variable_behavior/id:000044,src:000035,op:havoc,rep:2 +0 -1
  373. data/fuzz/framer/output/queue/.state/variable_behavior/id:000047,src:000039,op:int32,pos:17,val:+0 +0 -1
  374. data/fuzz/framer/output/queue/.state/variable_behavior/id:000049,src:000030,op:havoc,rep:16 +0 -1
  375. data/fuzz/framer/output/queue/.state/variable_behavior/id:000052,src:000048,op:int32,pos:18,val:be:+1 +0 -1
  376. data/fuzz/framer/output/queue/.state/variable_behavior/id:000053,src:000048,op:havoc,rep:2 +0 -1
  377. data/fuzz/framer/output/queue/.state/variable_behavior/id:000056,src:000052,op:havoc,rep:2 +0 -1
  378. data/fuzz/framer/output/queue/.state/variable_behavior/id:000057,src:000054,op:havoc,rep:4 +0 -1
  379. data/fuzz/framer/output/queue/.state/variable_behavior/id:000058,src:000019,op:havoc,rep:4 +0 -1
  380. data/fuzz/framer/output/queue/.state/variable_behavior/id:000065,src:000034,op:flip1,pos:17 +0 -1
  381. data/fuzz/framer/output/queue/.state/variable_behavior/id:000066,src:000034,op:flip2,pos:2,+cov +0 -1
  382. data/fuzz/framer/output/queue/.state/variable_behavior/id:000067,src:000066,op:havoc,rep:8 +0 -1
  383. data/fuzz/framer/output/queue/.state/variable_behavior/id:000068,src:000066,op:havoc,rep:8 +0 -1
  384. data/fuzz/framer/output/queue/.state/variable_behavior/id:000069,src:000066,op:havoc,rep:2 +0 -1
  385. data/fuzz/framer/output/queue/.state/variable_behavior/id:000071,src:000070,op:flip4,pos:2 +0 -1
  386. data/fuzz/framer/output/queue/.state/variable_behavior/id:000074,src:000040,op:havoc,rep:2 +0 -1
  387. data/fuzz/framer/output/queue/.state/variable_behavior/id:000075,src:000073,op:flip2,pos:3,+cov +0 -1
  388. data/fuzz/framer/output/queue/.state/variable_behavior/id:000076,src:000073,op:havoc,rep:4 +0 -1
  389. data/fuzz/framer/output/queue/.state/variable_behavior/id:000077,src:000075,op:flip1,pos:4,+cov +0 -1
  390. data/fuzz/framer/output/queue/.state/variable_behavior/id:000078,src:000075,op:flip1,pos:9,+cov +0 -1
  391. data/fuzz/framer/output/queue/.state/variable_behavior/id:000079,src:000043,op:int16,pos:14,val:+0 +0 -1
  392. data/fuzz/framer/output/queue/.state/variable_behavior/id:000080,src:000068,op:arith8,pos:2,val:+6 +0 -1
  393. data/fuzz/framer/output/queue/.state/variable_behavior/id:000081,src:000068,op:havoc,rep:4 +0 -1
  394. data/fuzz/framer/output/queue/.state/variable_behavior/id:000085,src:000072,op:havoc,rep:2 +0 -1
  395. data/fuzz/framer/output/queue/.state/variable_behavior/id:000086,src:000072,op:havoc,rep:32 +0 -1
  396. data/fuzz/framer/output/queue/.state/variable_behavior/id:000087,src:000072,op:havoc,rep:32 +0 -1
  397. data/fuzz/framer/output/queue/.state/variable_behavior/id:000088,src:000072,op:havoc,rep:8 +0 -1
  398. data/fuzz/framer/output/queue/.state/variable_behavior/id:000089,src:000079,op:havoc,rep:8 +0 -1
  399. data/fuzz/framer/output/queue/.state/variable_behavior/id:000091,src:000079,op:havoc,rep:2 +0 -1
  400. data/fuzz/framer/output/queue/.state/variable_behavior/id:000092,src:000083,op:flip2,pos:1 +0 -1
  401. data/fuzz/framer/output/queue/.state/variable_behavior/id:000094,src:000010,op:havoc,rep:16 +0 -1
  402. data/fuzz/framer/output/queue/.state/variable_behavior/id:000095,src:000044,op:havoc,rep:4 +0 -1
  403. data/fuzz/framer/output/queue/.state/variable_behavior/id:000096,src:000044,op:havoc,rep:2 +0 -1
  404. data/fuzz/framer/output/queue/.state/variable_behavior/id:000098,src:000047,op:havoc,rep:2 +0 -1
  405. data/fuzz/framer/output/queue/.state/variable_behavior/id:000099,src:000047,op:havoc,rep:2 +0 -1
  406. data/fuzz/framer/output/queue/.state/variable_behavior/id:000100,src:000047,op:havoc,rep:4 +0 -1
  407. data/fuzz/framer/output/queue/.state/variable_behavior/id:000101,src:000076,op:flip2,pos:22,+cov +0 -1
  408. data/fuzz/framer/output/queue/.state/variable_behavior/id:000102,src:000065,op:havoc,rep:2 +0 -1
  409. data/fuzz/framer/output/queue/.state/variable_behavior/id:000106,src:000104,op:havoc,rep:2 +0 -1
  410. data/fuzz/framer/output/queue/.state/variable_behavior/id:000107,src:000100,op:flip1,pos:38 +0 -1
  411. data/fuzz/framer/output/queue/.state/variable_behavior/id:000108,src:000100,op:flip2,pos:38 +0 -1
  412. data/fuzz/framer/output/queue/.state/variable_behavior/id:000111,src:000074,op:havoc,rep:2 +0 -1
  413. data/fuzz/framer/output/queue/.state/variable_behavior/id:000114,src:000112,op:havoc,rep:4 +0 -1
  414. data/fuzz/framer/output/queue/.state/variable_behavior/id:000115,src:000112,op:havoc,rep:4 +0 -1
  415. data/fuzz/framer/output/queue/.state/variable_behavior/id:000116,src:000101,op:havoc,rep:2 +0 -1
  416. data/fuzz/framer/output/queue/.state/variable_behavior/id:000120,src:000078+000117,op:splice,rep:2,+cov +0 -1
  417. data/fuzz/framer/output/queue/.state/variable_behavior/id:000124,src:000119,op:havoc,rep:2 +0 -1
  418. data/fuzz/framer/output/queue/.state/variable_behavior/id:000125,src:000123,op:flip2,pos:77 +0 -1
  419. data/fuzz/framer/output/queue/.state/variable_behavior/id:000126,src:000123,op:havoc,rep:4 +0 -1
  420. data/fuzz/framer/output/queue/.state/variable_behavior/id:000127,src:000123,op:havoc,rep:2 +0 -1
  421. data/fuzz/framer/output/queue/.state/variable_behavior/id:000128,src:000124,op:havoc,rep:4 +0 -1
  422. data/fuzz/framer/output/queue/.state/variable_behavior/id:000129,src:000128,op:havoc,rep:4 +0 -1
  423. data/fuzz/framer/output/queue/.state/variable_behavior/id:000131,src:000127,op:flip2,pos:151 +0 -1
  424. data/fuzz/framer/output/queue/.state/variable_behavior/id:000133,src:000130,op:havoc,rep:8 +0 -1
  425. data/fuzz/framer/output/queue/.state/variable_behavior/id:000134,src:000130,op:havoc,rep:2 +0 -1
  426. data/fuzz/framer/output/queue/.state/variable_behavior/id:000138,src:000132,op:havoc,rep:8 +0 -1
  427. data/fuzz/framer/output/queue/.state/variable_behavior/id:000140,src:000139,op:flip1,pos:661 +0 -1
  428. data/fuzz/framer/output/queue/.state/variable_behavior/id:000141,src:000139,op:havoc,rep:2 +0 -1
  429. data/fuzz/framer/output/queue/id:000000,orig:data.txt +0 -0
  430. data/fuzz/framer/output/queue/id:000001,src:000000,op:flip1,pos:0,+cov +0 -0
  431. data/fuzz/framer/output/queue/id:000002,src:000000,op:flip1,pos:2,+cov +0 -0
  432. data/fuzz/framer/output/queue/id:000003,src:000000,op:flip1,pos:3,+cov +0 -0
  433. data/fuzz/framer/output/queue/id:000004,src:000000,op:flip1,pos:3,+cov +0 -0
  434. data/fuzz/framer/output/queue/id:000005,src:000000,op:flip1,pos:3,+cov +0 -0
  435. data/fuzz/framer/output/queue/id:000006,src:000000,op:flip1,pos:3,+cov +0 -0
  436. data/fuzz/framer/output/queue/id:000007,src:000000,op:flip1,pos:3,+cov +0 -0
  437. data/fuzz/framer/output/queue/id:000008,src:000000,op:flip2,pos:3,+cov +0 -0
  438. data/fuzz/framer/output/queue/id:000009,src:000000,op:flip2,pos:3,+cov +0 -0
  439. data/fuzz/framer/output/queue/id:000010,src:000000,op:flip4,pos:3,+cov +0 -0
  440. data/fuzz/framer/output/queue/id:000011,src:000000,op:arith8,pos:2,val:-9 +0 -0
  441. data/fuzz/framer/output/queue/id:000012,src:000000,op:int16,pos:2,val:+256,+cov +0 -0
  442. data/fuzz/framer/output/queue/id:000013,src:000000,op:int16,pos:2,val:+1024,+cov +0 -0
  443. data/fuzz/framer/output/queue/id:000014,src:000000,op:int32,pos:0,val:+100663045 +0 -1
  444. data/fuzz/framer/output/queue/id:000015,src:000000,op:int32,pos:3,val:+100663045,+cov +0 -0
  445. data/fuzz/framer/output/queue/id:000016,src:000000,op:havoc,rep:32 +0 -0
  446. data/fuzz/framer/output/queue/id:000017,src:000000,op:havoc,rep:2 +0 -0
  447. data/fuzz/framer/output/queue/id:000018,src:000000,op:havoc,rep:32 +0 -0
  448. data/fuzz/framer/output/queue/id:000019,src:000000,op:havoc,rep:32 +0 -0
  449. data/fuzz/framer/output/queue/id:000020,src:000000,op:havoc,rep:64,+cov +0 -0
  450. data/fuzz/framer/output/queue/id:000021,src:000000,op:havoc,rep:128 +0 -0
  451. data/fuzz/framer/output/queue/id:000022,src:000000,op:havoc,rep:32,+cov +0 -0
  452. data/fuzz/framer/output/queue/id:000023,src:000000,op:havoc,rep:8 +0 -0
  453. data/fuzz/framer/output/queue/id:000024,src:000000,op:havoc,rep:2 +0 -0
  454. data/fuzz/framer/output/queue/id:000025,src:000000,op:havoc,rep:8,+cov +0 -0
  455. data/fuzz/framer/output/queue/id:000026,src:000000,op:havoc,rep:16,+cov +0 -0
  456. data/fuzz/framer/output/queue/id:000027,src:000000,op:havoc,rep:64 +0 -0
  457. data/fuzz/framer/output/queue/id:000028,src:000000,op:havoc,rep:64,+cov +0 -0
  458. data/fuzz/framer/output/queue/id:000029,src:000000,op:havoc,rep:32 +0 -0
  459. data/fuzz/framer/output/queue/id:000030,src:000004,op:flip4,pos:2,+cov +0 -0
  460. data/fuzz/framer/output/queue/id:000031,src:000005,op:flip1,pos:4,+cov +0 -0
  461. data/fuzz/framer/output/queue/id:000032,src:000005,op:arith8,pos:2,val:-5,+cov +0 -0
  462. data/fuzz/framer/output/queue/id:000033,src:000006,op:arith8,pos:2,val:-6,+cov +0 -0
  463. data/fuzz/framer/output/queue/id:000034,src:000007,op:havoc,rep:16 +0 -0
  464. data/fuzz/framer/output/queue/id:000035,src:000008,op:flip2,pos:2,+cov +0 -0
  465. data/fuzz/framer/output/queue/id:000036,src:000009,op:flip4,pos:2,+cov +0 -0
  466. data/fuzz/framer/output/queue/id:000037,src:000022,op:flip1,pos:21 +0 -0
  467. data/fuzz/framer/output/queue/id:000038,src:000022,op:havoc,rep:8 +0 -0
  468. data/fuzz/framer/output/queue/id:000039,src:000026,op:havoc,rep:2,+cov +0 -0
  469. data/fuzz/framer/output/queue/id:000040,src:000026,op:havoc,rep:2 +0 -0
  470. data/fuzz/framer/output/queue/id:000041,src:000026,op:havoc,rep:8,+cov +0 -0
  471. data/fuzz/framer/output/queue/id:000042,src:000032,op:havoc,rep:4 +0 -0
  472. data/fuzz/framer/output/queue/id:000043,src:000033,op:havoc,rep:8 +0 -0
  473. data/fuzz/framer/output/queue/id:000044,src:000035,op:havoc,rep:2 +0 -0
  474. data/fuzz/framer/output/queue/id:000045,src:000036,op:havoc,rep:4 +0 -0
  475. data/fuzz/framer/output/queue/id:000046,src:000036,op:havoc,rep:2 +0 -0
  476. data/fuzz/framer/output/queue/id:000047,src:000039,op:int32,pos:17,val:+0 +0 -0
  477. data/fuzz/framer/output/queue/id:000048,src:000025,op:havoc,rep:2 +0 -0
  478. data/fuzz/framer/output/queue/id:000049,src:000030,op:havoc,rep:16 +0 -0
  479. data/fuzz/framer/output/queue/id:000050,src:000030,op:havoc,rep:4 +0 -0
  480. data/fuzz/framer/output/queue/id:000051,src:000048,op:arith8,pos:21,val:-23 +0 -0
  481. data/fuzz/framer/output/queue/id:000052,src:000048,op:int32,pos:18,val:be:+1 +0 -0
  482. data/fuzz/framer/output/queue/id:000053,src:000048,op:havoc,rep:2 +0 -0
  483. data/fuzz/framer/output/queue/id:000054,src:000048,op:havoc,rep:4 +0 -0
  484. data/fuzz/framer/output/queue/id:000055,src:000048,op:havoc,rep:2 +0 -0
  485. data/fuzz/framer/output/queue/id:000056,src:000052,op:havoc,rep:2 +0 -0
  486. data/fuzz/framer/output/queue/id:000057,src:000054,op:havoc,rep:4 +0 -0
  487. data/fuzz/framer/output/queue/id:000058,src:000019,op:havoc,rep:4 +0 -0
  488. data/fuzz/framer/output/queue/id:000059,src:000046,op:arith8,pos:29,val:-29 +0 -0
  489. data/fuzz/framer/output/queue/id:000060,src:000046,op:havoc,rep:4 +0 -0
  490. data/fuzz/framer/output/queue/id:000061,src:000050,op:flip4,pos:29 +0 -0
  491. data/fuzz/framer/output/queue/id:000062,src:000050,op:havoc,rep:2 +0 -0
  492. data/fuzz/framer/output/queue/id:000063,src:000050,op:havoc,rep:4 +0 -0
  493. data/fuzz/framer/output/queue/id:000064,src:000060,op:havoc,rep:2 +0 -0
  494. data/fuzz/framer/output/queue/id:000065,src:000034,op:flip1,pos:17 +0 -0
  495. data/fuzz/framer/output/queue/id:000066,src:000034,op:flip2,pos:2,+cov +0 -0
  496. data/fuzz/framer/output/queue/id:000067,src:000066,op:havoc,rep:8 +0 -0
  497. data/fuzz/framer/output/queue/id:000068,src:000066,op:havoc,rep:8 +0 -0
  498. data/fuzz/framer/output/queue/id:000069,src:000066,op:havoc,rep:2 +0 -0
  499. data/fuzz/framer/output/queue/id:000070,src:000066,op:havoc,rep:4 +0 -0
  500. data/fuzz/framer/output/queue/id:000071,src:000070,op:flip4,pos:2 +0 -0
  501. data/fuzz/framer/output/queue/id:000072,src:000070,op:havoc,rep:4 +0 -0
  502. data/fuzz/framer/output/queue/id:000073,src:000040,op:flip1,pos:4,+cov +0 -0
  503. data/fuzz/framer/output/queue/id:000074,src:000040,op:havoc,rep:2 +0 -0
  504. data/fuzz/framer/output/queue/id:000075,src:000073,op:flip2,pos:3,+cov +0 -0
  505. data/fuzz/framer/output/queue/id:000076,src:000073,op:havoc,rep:4 +0 -0
  506. data/fuzz/framer/output/queue/id:000077,src:000075,op:flip1,pos:4,+cov +0 -0
  507. data/fuzz/framer/output/queue/id:000078,src:000075,op:flip1,pos:9,+cov +0 -0
  508. data/fuzz/framer/output/queue/id:000079,src:000043,op:int16,pos:14,val:+0 +0 -0
  509. data/fuzz/framer/output/queue/id:000080,src:000068,op:arith8,pos:2,val:+6 +0 -0
  510. data/fuzz/framer/output/queue/id:000081,src:000068,op:havoc,rep:4 +0 -0
  511. data/fuzz/framer/output/queue/id:000082,src:000072,op:havoc,rep:4 +0 -0
  512. data/fuzz/framer/output/queue/id:000083,src:000072,op:havoc,rep:2 +0 -0
  513. data/fuzz/framer/output/queue/id:000084,src:000072,op:havoc,rep:2 +0 -0
  514. data/fuzz/framer/output/queue/id:000085,src:000072,op:havoc,rep:2 +0 -0
  515. data/fuzz/framer/output/queue/id:000086,src:000072,op:havoc,rep:32 +0 -0
  516. data/fuzz/framer/output/queue/id:000087,src:000072,op:havoc,rep:32 +0 -0
  517. data/fuzz/framer/output/queue/id:000088,src:000072,op:havoc,rep:8 +0 -0
  518. data/fuzz/framer/output/queue/id:000089,src:000079,op:havoc,rep:8 +0 -0
  519. data/fuzz/framer/output/queue/id:000090,src:000079,op:havoc,rep:2 +0 -0
  520. data/fuzz/framer/output/queue/id:000091,src:000079,op:havoc,rep:2 +0 -0
  521. data/fuzz/framer/output/queue/id:000092,src:000083,op:flip2,pos:1 +0 -0
  522. data/fuzz/framer/output/queue/id:000093,src:000083,op:flip2,pos:2 +0 -0
  523. data/fuzz/framer/output/queue/id:000094,src:000010,op:havoc,rep:16 +0 -0
  524. data/fuzz/framer/output/queue/id:000095,src:000044,op:havoc,rep:4 +0 -0
  525. data/fuzz/framer/output/queue/id:000096,src:000044,op:havoc,rep:2 +0 -0
  526. data/fuzz/framer/output/queue/id:000097,src:000044,op:havoc,rep:2 +0 -0
  527. data/fuzz/framer/output/queue/id:000098,src:000047,op:havoc,rep:2 +0 -0
  528. data/fuzz/framer/output/queue/id:000099,src:000047,op:havoc,rep:2 +0 -0
  529. data/fuzz/framer/output/queue/id:000100,src:000047,op:havoc,rep:4 +0 -0
  530. data/fuzz/framer/output/queue/id:000101,src:000076,op:flip2,pos:22,+cov +0 -0
  531. data/fuzz/framer/output/queue/id:000102,src:000065,op:havoc,rep:2 +0 -0
  532. data/fuzz/framer/output/queue/id:000103,src:000082,op:havoc,rep:16 +0 -0
  533. data/fuzz/framer/output/queue/id:000104,src:000102,op:havoc,rep:2 +0 -0
  534. data/fuzz/framer/output/queue/id:000105,src:000056,op:flip1,pos:3 +0 -0
  535. data/fuzz/framer/output/queue/id:000106,src:000104,op:havoc,rep:2 +0 -0
  536. data/fuzz/framer/output/queue/id:000107,src:000100,op:flip1,pos:38 +0 -0
  537. data/fuzz/framer/output/queue/id:000108,src:000100,op:flip2,pos:38 +0 -0
  538. data/fuzz/framer/output/queue/id:000109,src:000100,op:arith8,pos:38,val:+5 +0 -0
  539. data/fuzz/framer/output/queue/id:000110,src:000103,op:havoc,rep:8 +0 -0
  540. data/fuzz/framer/output/queue/id:000111,src:000074,op:havoc,rep:2 +0 -0
  541. data/fuzz/framer/output/queue/id:000112,src:000028,op:havoc,rep:4 +0 -0
  542. data/fuzz/framer/output/queue/id:000113,src:000105,op:havoc,rep:2 +0 -0
  543. data/fuzz/framer/output/queue/id:000114,src:000112,op:havoc,rep:4 +0 -0
  544. data/fuzz/framer/output/queue/id:000115,src:000112,op:havoc,rep:4 +0 -0
  545. data/fuzz/framer/output/queue/id:000116,src:000101,op:havoc,rep:2 +0 -0
  546. data/fuzz/framer/output/queue/id:000117,src:000094,op:flip1,pos:22 +0 -0
  547. data/fuzz/framer/output/queue/id:000118,src:000094,op:arith8,pos:2,val:+24 +0 -0
  548. data/fuzz/framer/output/queue/id:000119,src:000101,op:havoc,rep:4 +0 -0
  549. data/fuzz/framer/output/queue/id:000120,src:000078+000117,op:splice,rep:2,+cov +0 -0
  550. data/fuzz/framer/output/queue/id:000121,src:000120,op:flip1,pos:41 +0 -0
  551. data/fuzz/framer/output/queue/id:000122,src:000120,op:havoc,rep:4 +0 -0
  552. data/fuzz/framer/output/queue/id:000123,src:000120,op:havoc,rep:4 +0 -0
  553. data/fuzz/framer/output/queue/id:000124,src:000119,op:havoc,rep:2 +0 -0
  554. data/fuzz/framer/output/queue/id:000125,src:000123,op:flip2,pos:77 +0 -0
  555. data/fuzz/framer/output/queue/id:000126,src:000123,op:havoc,rep:4 +0 -0
  556. data/fuzz/framer/output/queue/id:000127,src:000123,op:havoc,rep:2 +0 -0
  557. data/fuzz/framer/output/queue/id:000128,src:000124,op:havoc,rep:4 +0 -0
  558. data/fuzz/framer/output/queue/id:000129,src:000128,op:havoc,rep:4 +0 -0
  559. data/fuzz/framer/output/queue/id:000130,src:000127,op:flip1,pos:132 +0 -0
  560. data/fuzz/framer/output/queue/id:000131,src:000127,op:flip2,pos:151 +0 -0
  561. data/fuzz/framer/output/queue/id:000132,src:000130,op:havoc,rep:4 +0 -0
  562. data/fuzz/framer/output/queue/id:000133,src:000130,op:havoc,rep:8 +0 -0
  563. data/fuzz/framer/output/queue/id:000134,src:000130,op:havoc,rep:2 +0 -0
  564. data/fuzz/framer/output/queue/id:000135,src:000134,op:flip1,pos:58 +0 -0
  565. data/fuzz/framer/output/queue/id:000136,src:000135,op:havoc,rep:2 +0 -0
  566. data/fuzz/framer/output/queue/id:000137,src:000135,op:havoc,rep:2 +0 -0
  567. data/fuzz/framer/output/queue/id:000138,src:000132,op:havoc,rep:8 +0 -0
  568. data/fuzz/framer/output/queue/id:000139,src:000120+000138,op:splice,rep:2 +0 -0
  569. data/fuzz/framer/output/queue/id:000140,src:000139,op:flip1,pos:661 +0 -0
  570. data/fuzz/framer/output/queue/id:000141,src:000139,op:havoc,rep:2 +0 -0
  571. data/fuzz/framer/output/queue/id:000142,src:000141,op:flip2,pos:801 +0 -0
  572. data/fuzz/framer/script.rb +0 -26
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41549838ed44bff94fff0e97d7502e722193660ff326afe78ca38dfc0a884ea0
4
- data.tar.gz: a8f52fcf48c49ecfa3a36c3204c34460060d3000fa98546d407376a375837236
3
+ metadata.gz: 28d53d86975d6aa52e2ea20e36c41fa4e8fff6437ef8b831de001b3d2849609b
4
+ data.tar.gz: 6c13193934a0eea767493757ff70e814d68f66fe68af4a774fb22d707e78437d
5
5
  SHA512:
6
- metadata.gz: a9dde32f6f4d038fb1a3abdcee9101795e3a52ad59e12697ec4214b388ca1b065353b891a88f0944ac50b5b1c0244a8f562c59329bc8cb62594bad99c4ca3c2c
7
- data.tar.gz: 150a3434e0ba9d86e07dca4015d39a89d844d81f0fcd7258a4f039237ed9ae166223d9a0d70cef031cd4bdf75c5d7ebcb2e1256ac738d33f97d0ae237cbeddac
6
+ metadata.gz: 13bcd265d3eba3c322cdc6a473955a946a219f9d6f0015607a04248392fccadf70d456b42e1fdc455697678f95a87982e95ca7dda1774468f87dfdb16ed09d4e
7
+ data.tar.gz: 1f393c99f5657db925c6ea337ba5190cc722b8e8698d7d30751348b061719c60f905b551a2d60e1d90182a94dae1c2dcbc23eee9c2bf408b46bb0b08faa3799f
checksums.yaml.gz.sig ADDED
Binary file
@@ -1,22 +1,7 @@
1
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
20
5
 
21
6
  require_relative 'connection'
22
7
 
@@ -68,10 +53,6 @@ module Protocol
68
53
  # This is almost certainly invalid:
69
54
  promised_stream, request_headers = stream.receive_push_promise(frame)
70
55
 
71
- if stream.closed?
72
- @streams.delete(stream.id)
73
- end
74
-
75
56
  return promised_stream, request_headers
76
57
  end
77
58
  end
@@ -1,22 +1,8 @@
1
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
5
+ # Copyright, 2023, by Marco Concetto Rudilosso.
20
6
 
21
7
  require_relative 'framer'
22
8
  require_relative 'dependency'
@@ -55,7 +41,7 @@ module Protocol
55
41
  @decoder = HPACK::Context.new
56
42
  @encoder = HPACK::Context.new
57
43
 
58
- @local_window = LocalWindow.new
44
+ @local_window = LocalWindow.new()
59
45
  @remote_window = Window.new
60
46
  end
61
47
 
@@ -77,7 +63,7 @@ module Protocol
77
63
  end
78
64
 
79
65
  def maximum_concurrent_streams
80
- [@local_settings.maximum_concurrent_streams, @remote_settings.maximum_concurrent_streams].min
66
+ @local_settings.maximum_concurrent_streams
81
67
  end
82
68
 
83
69
  attr :framer
@@ -301,9 +287,10 @@ module Protocol
301
287
 
302
288
  def receive_ping(frame)
303
289
  if @state != :closed
304
- if frame.stream_id != 0
305
- raise ProtocolError, "Ping received for non-zero stream!"
306
- end
290
+ # This is handled in `read_payload`:
291
+ # if frame.stream_id != 0
292
+ # raise ProtocolError, "Ping received for non-zero stream!"
293
+ # end
307
294
 
308
295
  unless frame.acknowledgement?
309
296
  reply = frame.acknowledge
@@ -327,7 +314,7 @@ module Protocol
327
314
  end
328
315
  end
329
316
 
330
- def valid_remote_stream_id?
317
+ def valid_remote_stream_id?(stream_id)
331
318
  false
332
319
  end
333
320
 
@@ -352,6 +339,10 @@ module Protocol
352
339
  # On the client side, we create requests.
353
340
  # @return [Stream] the created stream.
354
341
  def create_stream(id = next_stream_id, &block)
342
+ if @streams.key?(id)
343
+ raise ProtocolError, "Cannot create stream with id #{id}, already exists!"
344
+ end
345
+
355
346
  if block_given?
356
347
  return yield(self, id)
357
348
  else
@@ -396,24 +387,6 @@ module Protocol
396
387
  write_frame(frame)
397
388
  end
398
389
 
399
- def idle_stream_id?(id)
400
- if id.even?
401
- # Server-initiated streams are even.
402
- if @local_stream_id.even?
403
- id >= @local_stream_id
404
- else
405
- id > @remote_stream_id
406
- end
407
- elsif id.odd?
408
- # Client-initiated streams are odd.
409
- if @local_stream_id.odd?
410
- id >= @local_stream_id
411
- else
412
- id > @remote_stream_id
413
- end
414
- end
415
- end
416
-
417
390
  # Sets the priority for an incoming stream.
418
391
  def receive_priority(frame)
419
392
  if dependency = @dependencies[frame.stream_id]
@@ -435,27 +408,34 @@ module Protocol
435
408
  id.even?
436
409
  end
437
410
 
438
- def closed_stream_id?(id)
439
- if id.zero?
440
- # The connection "stream id" can never be closed:
441
- false
442
- elsif id.even?
411
+ def idle_stream_id?(id)
412
+ if id.even?
443
413
  # Server-initiated streams are even.
444
414
  if @local_stream_id.even?
445
- id < @local_stream_id
415
+ id >= @local_stream_id
446
416
  else
447
- id <= @remote_stream_id
417
+ id > @remote_stream_id
448
418
  end
449
419
  elsif id.odd?
450
420
  # Client-initiated streams are odd.
451
421
  if @local_stream_id.odd?
452
- id < @local_stream_id
422
+ id >= @local_stream_id
453
423
  else
454
- id <= @remote_stream_id
424
+ id > @remote_stream_id
455
425
  end
456
426
  end
457
427
  end
458
428
 
429
+ # This is only valid if the stream doesn't exist in `@streams`.
430
+ def closed_stream_id?(id)
431
+ if id.zero?
432
+ # The connection "stream id" can never be closed:
433
+ false
434
+ else
435
+ !idle_stream_id?(id)
436
+ end
437
+ end
438
+
459
439
  def receive_reset_stream(frame)
460
440
  if frame.connection?
461
441
  raise ProtocolError, "Cannot reset connection!"
@@ -1,22 +1,7 @@
1
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
20
5
 
21
6
  require_relative 'frame'
22
7
 
@@ -29,6 +14,10 @@ module Protocol
29
14
  @continuation = nil
30
15
  end
31
16
 
17
+ def continued?
18
+ !!@continuation
19
+ end
20
+
32
21
  def end_headers?
33
22
  flag_set?(END_HEADERS)
34
23
  end
@@ -112,7 +101,7 @@ module Protocol
112
101
  end
113
102
 
114
103
  def inspect
115
- "\#<#{self.class} stream_id=#{@stream_id} flags=#{@flags} #{@length}b>"
104
+ "\#<#{self.class} stream_id=#{@stream_id} flags=#{@flags} length=#{@length || 0}b>"
116
105
  end
117
106
  end
118
107
  end
@@ -1,23 +1,7 @@
1
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- # Copyright, 2013, by Ilya Grigorik.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
- # THE SOFTWARE.
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
21
5
 
22
6
  require_relative 'frame'
23
7
  require_relative 'padded'
@@ -59,7 +43,7 @@ module Protocol
59
43
  end
60
44
 
61
45
  def inspect
62
- "\#<#{self.class} stream_id=#{@stream_id} flags=#{@flags} #{@length}b>"
46
+ "\#<#{self.class} stream_id=#{@stream_id} flags=#{@flags} #{@length || 0}b>"
63
47
  end
64
48
  end
65
49
  end
@@ -1,22 +1,7 @@
1
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2020-2023, by Samuel Williams.
20
5
 
21
6
  module Protocol
22
7
  module HTTP2
@@ -185,7 +170,7 @@ module Protocol
185
170
  end
186
171
 
187
172
  def total_weight
188
- self.orderd_children
173
+ self.ordered_children
189
174
 
190
175
  return @total_weight
191
176
  end
@@ -218,14 +203,14 @@ module Protocol
218
203
  end
219
204
  end
220
205
 
221
- def to_s
206
+ def inspect
222
207
  "\#<#{self.class} id=#{@id} parent id=#{@parent&.id} weight=#{@weight} #{@children&.size || 0} children>"
223
208
  end
224
209
 
225
- def print_hierarchy(buffer, indent: 0)
226
- buffer.puts "#{" " * indent}#{self}"
210
+ def print_hierarchy(output = $stderr, indent: 0)
211
+ output.puts "#{"\t" * indent}#{self.inspect}"
227
212
  @children&.each_value do |child|
228
- child.print_hierarchy(buffer, indent: indent+1)
213
+ child.print_hierarchy(output, indent: indent+1)
229
214
  end
230
215
  end
231
216
  end
@@ -1,22 +1,7 @@
1
- # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
20
5
 
21
6
  require 'protocol/http/error'
22
7
 
@@ -95,12 +80,6 @@ module Protocol
95
80
  end
96
81
  end
97
82
 
98
- class HeaderError < StreamClosed
99
- def initialize(message)
100
- super(message)
101
- end
102
- end
103
-
104
83
  class GoawayError < ProtocolError
105
84
  end
106
85
 
@@ -111,6 +90,12 @@ module Protocol
111
90
  end
112
91
  end
113
92
 
93
+ class HeaderError < StreamClosed
94
+ def initialize(message)
95
+ super(message)
96
+ end
97
+ end
98
+
114
99
  # Raised on invalid flow control frame or command.
115
100
  class FlowControlError < ProtocolError
116
101
  def initialize(message)
@@ -1,22 +1,8 @@
1
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
5
+ # Copyright, 2019, by Yuta Iwama.
20
6
 
21
7
  require_relative 'window_update_frame'
22
8
 
@@ -1,23 +1,8 @@
1
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- # Copyright, 2013, by Ilya Grigorik.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
- # THE SOFTWARE.
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
5
+ # Copyright, 2019, by Yuta Iwama.
21
6
 
22
7
  require_relative 'error'
23
8
 
@@ -46,12 +31,15 @@ module Protocol
46
31
  LENGTH_HISHIFT = 16
47
32
  LENGTH_LOMASK = 0xFFFF
48
33
 
34
+ # The base class does not have any specific type index:
35
+ TYPE = nil
36
+
49
37
  # @param length [Integer] the length of the payload, or nil if the header has not been read yet.
50
38
  def initialize(stream_id = 0, flags = 0, type = self.class::TYPE, length = nil, payload = nil)
51
- @length = length
52
- @type = type
53
- @flags = flags
54
39
  @stream_id = stream_id
40
+ @flags = flags
41
+ @type = type
42
+ @length = length
55
43
  @payload = payload
56
44
  end
57
45
 
@@ -94,7 +82,7 @@ module Protocol
94
82
  @length = payload.bytesize
95
83
 
96
84
  if maximum_size and @length > maximum_size
97
- raise ProtocolError, "Frame length #{@length} bigger than maximum allowed: #{maximum_size}"
85
+ raise ProtocolError, "Frame length bigger than maximum allowed: #{@length} > #{maximum_size}"
98
86
  end
99
87
  end
100
88
 
@@ -127,7 +115,7 @@ module Protocol
127
115
  # @return [String]
128
116
  def header
129
117
  unless VALID_LENGTH.include? @length
130
- raise ProtocolError, "Invalid frame size: #{@length.inspect}"
118
+ raise ProtocolError, "Invalid frame length: #{@length.inspect}"
131
119
  end
132
120
 
133
121
  unless VALID_STREAM_ID.include? @stream_id
@@ -193,8 +181,15 @@ module Protocol
193
181
  end
194
182
 
195
183
  def write(stream)
196
- if @payload and @length != @payload.bytesize
197
- raise ProtocolError, "Invalid payload size: #{@length} != #{@payload.bytesize}"
184
+ # Validate the payload size:
185
+ if @payload.nil?
186
+ if @length != 0
187
+ raise ProtocolError, "Invalid frame length: #{@length} != 0"
188
+ end
189
+ else
190
+ if @length != @payload.bytesize
191
+ raise ProtocolError, "Invalid payload size: #{@length} != #{@payload.bytesize}"
192
+ end
198
193
  end
199
194
 
200
195
  self.write_header(stream)
@@ -206,7 +201,7 @@ module Protocol
206
201
  end
207
202
 
208
203
  def inspect
209
- "\#<#{self.class} stream_id=#{@stream_id} flags=#{@flags} #{self.unpack}>"
204
+ "\#<#{self.class} stream_id=#{@stream_id} flags=#{@flags} payload=#{self.unpack}>"
210
205
  end
211
206
  end
212
207
  end
@@ -1,23 +1,7 @@
1
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- # Copyright, 2013, by Ilya Grigorik.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
- # THE SOFTWARE.
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
21
5
 
22
6
  require_relative 'error'
23
7
 
@@ -49,7 +33,7 @@ module Protocol
49
33
  ].freeze
50
34
 
51
35
  # Default connection "fast-fail" preamble string as defined by the spec.
52
- CONNECTION_PREFACE_MAGIC = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n".freeze
36
+ CONNECTION_PREFACE = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n".freeze
53
37
 
54
38
  class Framer
55
39
  def initialize(stream, frames = FRAMES)
@@ -66,13 +50,13 @@ module Protocol
66
50
  end
67
51
 
68
52
  def write_connection_preface
69
- @stream.write(CONNECTION_PREFACE_MAGIC)
53
+ @stream.write(CONNECTION_PREFACE)
70
54
  end
71
55
 
72
56
  def read_connection_preface
73
- string = @stream.read(CONNECTION_PREFACE_MAGIC.bytesize)
57
+ string = @stream.read(CONNECTION_PREFACE.bytesize)
74
58
 
75
- unless string == CONNECTION_PREFACE_MAGIC
59
+ unless string == CONNECTION_PREFACE
76
60
  raise HandshakeError, "Invalid connection preface: #{string.inspect}"
77
61
  end
78
62
 
@@ -1,22 +1,7 @@
1
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
20
5
 
21
6
  require_relative 'frame'
22
7
 
@@ -1,22 +1,7 @@
1
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
20
5
 
21
6
  require_relative 'frame'
22
7
  require_relative 'padded'
@@ -83,7 +68,7 @@ module Protocol
83
68
  end
84
69
 
85
70
  def inspect
86
- "\#<#{self.class} stream_id=#{@stream_id} flags=#{@flags} #{@length}b>"
71
+ "\#<#{self.class} stream_id=#{@stream_id} flags=#{@flags} #{@length || 0}b>"
87
72
  end
88
73
  end
89
74
  end
@@ -1,23 +1,7 @@
1
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- # Copyright, 2013, by Ilya Grigorik.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
- # THE SOFTWARE.
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
21
5
 
22
6
  require_relative 'frame'
23
7
 
@@ -63,7 +47,7 @@ module Protocol
63
47
  def unpack
64
48
  if padded?
65
49
  padding_size = @payload[0].ord
66
- data_size = (@payload.bytesize - 1) - padding_size
50
+ data_size = @payload.bytesize - padding_size
67
51
 
68
52
  if data_size < 0
69
53
  raise ProtocolError, "Invalid padding length: #{padding_size}"