@@ -89,10 +89,16 @@ static int buffer_grow(buffer_t buffer, int min_length) {
89
89
/* Assure that `buffer` has at least `size` free bytes (and grow if needed).
90
90
* Return non-zero on allocation failure. */
91
91
static int buffer_assure_space (buffer_t buffer , int size ) {
92
- if (buffer -> position + size <= buffer -> size ) {
92
+ int new_size = buffer -> position + size ;
93
+ /* Check for overflow. */
94
+ if (new_size < buffer -> position ) {
95
+ return 1 ;
96
+ }
97
+
98
+ if (new_size <= buffer -> size ) {
93
99
return 0 ;
94
100
}
95
- return buffer_grow (buffer , buffer -> position + size );
101
+ return buffer_grow (buffer , new_size );
96
102
}
97
103
98
104
/* Save `size` bytes from the current position in `buffer` (and grow if needed).
@@ -118,21 +124,6 @@ int buffer_write(buffer_t buffer, const char* data, int size) {
118
124
return 0 ;
119
125
}
120
126
121
- /* Write `size` bytes from `data` to `buffer` at position `position`.
122
- * Does not change the internal position of `buffer`.
123
- * Return non-zero if buffer isn't large enough for write. */
124
- int buffer_write_at_position (buffer_t buffer , buffer_position position ,
125
- const char * data , int size ) {
126
- if (position + size > buffer -> size ) {
127
- buffer_free (buffer );
128
- return 1 ;
129
- }
130
-
131
- memcpy (buffer -> buffer + position , data , size );
132
- return 0 ;
133
- }
134
-
135
-
136
127
int buffer_get_position (buffer_t buffer ) {
137
128
return buffer -> position ;
138
129
}
0 commit comments