@@ -65,7 +65,14 @@ impl DataView {
6565 } )
6666 }
6767
68- pub fn extract < T : FromBytes > ( & self , offset : usize , le : bool ) -> Res < T > {
68+ pub fn extract < T : FromBytes > ( & self , offset : isize , le : bool ) -> Res < T > {
69+ if offset < 0 {
70+ return Err ( Error :: range ( "Out of bounds" ) ) ;
71+ }
72+
73+ let offset = offset as usize ;
74+
75+
6976 if offset > self . byte_length {
7077 return Err ( Error :: range ( "Out of bounds" ) ) ;
7178 }
@@ -91,7 +98,14 @@ impl DataView {
9198 Ok ( T :: from_bytes ( bytes, le) )
9299 }
93100
94- pub fn set < T : FromBytes > ( & self , offset : usize , value : T , le : bool ) -> Res {
101+ pub fn set < T : FromBytes > ( & self , offset : isize , value : T , le : bool ) -> Res {
102+ if offset < 0 {
103+ return Err ( Error :: range ( "Out of bounds" ) ) ;
104+ }
105+
106+ let offset = offset as usize ;
107+
108+
95109 if offset > self . byte_length {
96110 return Err ( Error :: range ( "Out of bounds" ) ) ;
97111 }
@@ -137,15 +151,15 @@ impl DataView {
137151 }
138152
139153 #[ prop( "getFloat16" ) ]
140- pub fn get_float16 ( & self , offset : usize , little : Option < bool > ) -> ValueResult {
154+ pub fn get_float16 ( & self , offset : isize , little : Option < bool > ) -> ValueResult {
141155 let le = little. unwrap_or ( false ) ;
142156
143157 let value = self . extract :: < f16 > ( offset, le) ?;
144158
145159 Ok ( value. into ( ) )
146160 }
147161 #[ prop( "getFloat32" ) ]
148- pub fn get_float32 ( & self , offset : usize , little : Option < bool > ) -> ValueResult {
162+ pub fn get_float32 ( & self , offset : isize , little : Option < bool > ) -> ValueResult {
149163 let le = little. unwrap_or ( false ) ;
150164
151165 let value = self . extract :: < f32 > ( offset, le) ?;
@@ -154,79 +168,79 @@ impl DataView {
154168 }
155169
156170 #[ prop( "getFloat64" ) ]
157- pub fn get_float64 ( & self , offset : usize , little : Option < bool > ) -> ValueResult {
171+ pub fn get_float64 ( & self , offset : isize , little : Option < bool > ) -> ValueResult {
158172 let le = little. unwrap_or ( false ) ;
159173 let value = self . extract :: < f64 > ( offset, le) ?;
160174
161175 Ok ( value. into ( ) )
162176 }
163177
164178 #[ prop( "getInt8" ) ]
165- pub fn get_int8 ( & self , offset : usize , little : Option < bool > ) -> ValueResult {
179+ pub fn get_int8 ( & self , offset : isize , little : Option < bool > ) -> ValueResult {
166180 let le = little. unwrap_or ( false ) ;
167181 let value = self . extract :: < i8 > ( offset, le) ?;
168182
169183 Ok ( value. into ( ) )
170184 }
171185
172186 #[ prop( "getInt16" ) ]
173- pub fn get_int16 ( & self , offset : usize , little : Option < bool > ) -> ValueResult {
187+ pub fn get_int16 ( & self , offset : isize , little : Option < bool > ) -> ValueResult {
174188 let le = little. unwrap_or ( false ) ;
175189 let value = self . extract :: < i16 > ( offset, le) ?;
176190
177191 Ok ( value. into ( ) )
178192 }
179193
180194 #[ prop( "getInt32" ) ]
181- pub fn get_int32 ( & self , offset : usize , little : Option < bool > ) -> ValueResult {
195+ pub fn get_int32 ( & self , offset : isize , little : Option < bool > ) -> ValueResult {
182196 let le = little. unwrap_or ( false ) ;
183197 let value = self . extract :: < i32 > ( offset, le) ?;
184198
185199 Ok ( value. into ( ) )
186200 }
187201
188202 #[ prop( "getBigInt64" ) ]
189- pub fn get_big_int64 ( & self , offset : usize , little : Option < bool > ) -> ValueResult {
203+ pub fn get_big_int64 ( & self , offset : isize , little : Option < bool > ) -> ValueResult {
190204 let le = little. unwrap_or ( false ) ;
191205 let value = self . extract :: < i64 > ( offset, le) ?;
192206
193207 Ok ( BigInt :: from ( value) . into ( ) )
194208 }
195209
196210 #[ prop( "getUint8" ) ]
197- pub fn get_uint8 ( & self , offset : usize , le : Option < bool > ) -> ValueResult {
211+ pub fn get_uint8 ( & self , offset : isize , le : Option < bool > ) -> ValueResult {
198212 let le = le. unwrap_or ( false ) ;
199213 let value = self . extract :: < u8 > ( offset, le) ?;
200214
201215 Ok ( value. into ( ) )
202216 }
203217
204218 #[ prop( "getUint16" ) ]
205- pub fn get_uint16 ( & self , offset : usize , little : Option < bool > ) -> ValueResult {
219+ pub fn get_uint16 ( & self , offset : isize , little : Option < bool > ) -> ValueResult {
206220 let le = little. unwrap_or ( false ) ;
207221 let value = self . extract :: < u16 > ( offset, le) ?;
208222
209223 Ok ( value. into ( ) )
210224 }
211225
212226 #[ prop( "getUint32" ) ]
213- pub fn get_uint32 ( & self , offset : usize , little : Option < bool > ) -> ValueResult {
227+ pub fn get_uint32 ( & self , offset : isize , little : Option < bool > ) -> ValueResult {
214228 let le = little. unwrap_or ( false ) ;
215229 let value = self . extract :: < u32 > ( offset, le) ?;
216230
217231 Ok ( value. into ( ) )
218232 }
219233
220234 #[ prop( "getBigUint64" ) ]
221- pub fn get_big_uint64 ( & self , offset : usize , little : Option < bool > ) -> ValueResult {
235+ pub fn get_big_uint64 ( & self , offset : isize , little : Option < bool > ) -> ValueResult {
222236 let le = little. unwrap_or ( false ) ;
223237 let value = self . extract :: < u64 > ( offset, le) ?;
224238
225239 Ok ( BigInt :: from ( value) . into ( ) )
226240 }
227241
228242 #[ prop( "setFloat16" ) ]
229- pub fn set_float16 ( & self , offset : usize , value : f32 , little : Option < bool > ) -> ValueResult {
243+ pub fn set_float16 ( & self , offset : isize , value : f32 , little : Option < bool > ) -> ValueResult {
230244 let le = little. unwrap_or ( false ) ;
231245 let value = f16:: from_f32 ( value) ;
232246
@@ -236,7 +250,7 @@ impl DataView {
236250 }
237251
238252 #[ prop( "setFloat32" ) ]
239- pub fn set_float32 ( & self , offset : usize , value : f32 , little : Option < bool > ) -> ValueResult {
253+ pub fn set_float32 ( & self , offset : isize , value : f32 , little : Option < bool > ) -> ValueResult {
240254 let le = little. unwrap_or ( false ) ;
241255
242256 self . set ( offset, value, le) ?;
@@ -245,7 +259,7 @@ impl DataView {
245259 }
246260
247261 #[ prop( "setFloat64" ) ]
248- pub fn set_float64 ( & self , offset : usize , value : f64 , little : Option < bool > ) -> ValueResult {
262+ pub fn set_float64 ( & self , offset : isize , value : f64 , little : Option < bool > ) -> ValueResult {
249263 let le = little. unwrap_or ( false ) ;
250264
251265 self . set ( offset, value, le) ?;
@@ -254,7 +268,7 @@ impl DataView {
254268 }
255269
256270 #[ prop( "setInt8" ) ]
257- pub fn set_int8 ( & self , offset : usize , value : i8 , little : Option < bool > ) -> ValueResult {
271+ pub fn set_int8 ( & self , offset : isize , value : i8 , little : Option < bool > ) -> ValueResult {
258272 let le = little. unwrap_or ( false ) ;
259273
260274 self . set ( offset, value, le) ?;
@@ -263,7 +277,7 @@ impl DataView {
263277 }
264278
265279 #[ prop( "setInt16" ) ]
266- pub fn set_int16 ( & self , offset : usize , value : i16 , little : Option < bool > ) -> ValueResult {
280+ pub fn set_int16 ( & self , offset : isize , value : i16 , little : Option < bool > ) -> ValueResult {
267281 let le = little. unwrap_or ( false ) ;
268282
269283 self . set ( offset, value, le) ?;
@@ -272,7 +286,7 @@ impl DataView {
272286 }
273287
274288 #[ prop( "setInt32" ) ]
275- pub fn set_int32 ( & self , offset : usize , value : i32 , little : Option < bool > ) -> ValueResult {
289+ pub fn set_int32 ( & self , offset : isize , value : i32 , little : Option < bool > ) -> ValueResult {
276290 let le = little. unwrap_or ( false ) ;
277291
278292 self . set ( offset, value, le) ?;
@@ -283,7 +297,7 @@ impl DataView {
283297 #[ prop( "setBigInt64" ) ]
284298 pub fn set_big_int64 (
285299 & self ,
286- offset : usize ,
300+ offset : isize ,
287301 value : & BigInt ,
288302 little : Option < bool > ,
289303 ) -> ValueResult {
@@ -297,7 +311,7 @@ impl DataView {
297311 }
298312
299313 #[ prop( "setUint8" ) ]
300- pub fn set_uint8 ( & self , offset : usize , value : u8 , little : Option < bool > ) -> ValueResult {
314+ pub fn set_uint8 ( & self , offset : isize , value : u8 , little : Option < bool > ) -> ValueResult {
301315 let le = little. unwrap_or ( false ) ;
302316
303317 self . set ( offset, value, le) ?;
@@ -306,7 +320,7 @@ impl DataView {
306320 }
307321
308322 #[ prop( "setUint16" ) ]
309- pub fn set_uint16 ( & self , offset : usize , value : u16 , little : Option < bool > ) -> ValueResult {
323+ pub fn set_uint16 ( & self , offset : isize , value : u16 , little : Option < bool > ) -> ValueResult {
310324 let le = little. unwrap_or ( false ) ;
311325
312326 self . set ( offset, value, le) ?;
@@ -315,7 +329,7 @@ impl DataView {
315329 }
316330
317331 #[ prop( "setUint32" ) ]
318- pub fn set_uint32 ( & self , offset : usize , value : u32 , little : Option < bool > ) -> ValueResult {
332+ pub fn set_uint32 ( & self , offset : isize , value : u32 , little : Option < bool > ) -> ValueResult {
319333 let le = little. unwrap_or ( false ) ;
320334
321335 self . set ( offset, value, le) ?;
@@ -326,7 +340,7 @@ impl DataView {
326340 #[ prop( "setBigUint64" ) ]
327341 pub fn set_big_uint64 (
328342 & self ,
329- offset : usize ,
343+ offset : isize ,
330344 value : & BigInt ,
331345 little : Option < bool > ,
332346 ) -> ValueResult {
0 commit comments