@@ -53,13 +53,13 @@ class ByteArray: public std::vector<unsigned char>
5353
5454 return res;
5555 }
56- bool endsWith (const ByteArray& b) const { return size () >= b.size () && (b.empty () || !memcmp (& data ()[ size ()- b.size ()], b.data (),b.size ())); }
56+ bool endsWith (const ByteArray& b) const { return size () >= b.size () && (b.empty () || !memcmp (data () + ( size () - b.size ()), b.data (), b.size ())); }
5757 bool endsWith (char b) const { return size () > 0 && back ()==b; }
58- bool startsWith (const ByteArray& b) const { return b. size () <= size () && (b.empty () || !strncmp (( char *) b.data (),( char *) data (), std::min ( size (), b.size () ))); }
58+ bool startsWith (const ByteArray& b) const { return size () >= b. size () && (b.empty () || !memcmp ( data (), b.data (), b.size ())); }
5959 bool startsWith (const char *b) const
6060 {
6161 for (uint32_t n=0 ;b[n]!=0 ;++n)
62- if (n >= size () || b[n]!=(*this )[n])
62+ if (n >= size () || ( unsigned char ) b[n]!=(*this )[n])
6363 return false ;
6464
6565 return true ;
@@ -69,16 +69,19 @@ class ByteArray: public std::vector<unsigned char>
6969 {
7070 uint32_t n;
7171 for (n=0 ;b[n]!=0 ;++n)
72- if (n >= size () || b[n]!=(*this )[n])
72+ if (n >= size () || ( unsigned char ) b[n]!=(*this )[n])
7373 return false ;
7474
7575 return n==size ();
7676 }
7777
78- ByteArray mid (uint32_t n,int s= -1 ) const
78+ ByteArray mid (uint32_t n, int s = -1 ) const
7979 {
80- ByteArray res ((s>=0 )?s:(size ()-n));
81- if (!res.empty () && n < size ()) memcpy (res.data (),&data ()[n],res.size ());
80+ if (n >= size ()) return ByteArray ();
81+ uint32_t max_len = (uint32_t )size () - n;
82+ uint32_t len = (s >= 0 ) ? std::min ((uint32_t )s, max_len) : max_len;
83+ ByteArray res (len);
84+ if (len > 0 ) memcpy (res.data (), data () + n, len);
8285 return res;
8386 }
8487
0 commit comments