1 |
/** @page apreq_changes CHANGES |
2 |
//! brief List of major changes. |
3 |
|
4 |
|
5 |
@section v2_07 Changes with libapreq2-2.07 (released February 12, 2006) |
6 |
|
7 |
|
8 |
- C API [joes] |
9 |
SECURITY: CVE-2006-0042 (cve.mitre.org) |
10 |
Eliminate potential quadratic behavior in apreq_parse_headers() and |
11 |
apreq_parse_urlencoded(). |
12 |
|
13 |
- Perl API [Philip M. Gollucci] |
14 |
Fix Apache2::Cookie->cookies() to comply with its documentation |
15 |
|
16 |
- C API [Philip M. Gollucci] |
17 |
Use the APREQ_DEFAULT_READ_LIMIT constant for the read_limit |
18 |
|
19 |
- C API [Ville Skyttä, Dirk Nehring] |
20 |
Add explicit cast in apreq_escape()/apreq_util.h to keep |
21 |
C++ compilers happy. |
22 |
|
23 |
- C API [joes] |
24 |
Protect against arbitrary recursion depth in apreq_parse_multipart() |
25 |
by adding a reasonable compile-time MAX_LEVEL limit. |
26 |
|
27 |
- C API [joes] |
28 |
Clean up end-of-file parsing for apreq_parse_multipart(), |
29 |
conforming to rfc-2046 § 5.1.1. |
30 |
|
31 |
- Perl API [joes] |
32 |
Move APR::Request::Param::Table and APR::Request::Cookie::Table |
33 |
packages to APR::Request module. |
34 |
|
35 |
- Perl XS [Steve Hay] |
36 |
Fix compile problems on Win32 without PERL_IMPLICIT_SYS |
37 |
related to link being an unresolved symbol. |
38 |
|
39 |
- Perl API [joes] |
40 |
APR::Request::Cookie::thaw() isn't a class method. |
41 |
|
42 |
- C API [joes] |
43 |
Fix off-by-one bug in the continuation-lines portion of the |
44 |
header parser. |
45 |
|
46 |
- Perl API [joes] |
47 |
Move APR::Request::upload to APR::Request, where it belongs. |
48 |
|
49 |
- Perl XS [Nikolay Ananiev] |
50 |
Use MP_STATIC declarations to allow Cygwin builds. |
51 |
|
52 |
- Perl API [joes] |
53 |
encode()/decode() were busted with zero-length args. This caused |
54 |
Apache2::Cookie::new() to segfault on cookie value of "". |
55 |
|
56 |
- C API [joes] |
57 |
Add apreq_charset_divine() and eliminate charset offset from return |
58 |
value of apreq_decode(v). |
59 |
|
60 |
- C API [joes] |
61 |
Improve the cp1252-charset heuristics for apreq_decode(v). |
62 |
|
63 |
- C API [Ralph Mattes] |
64 |
Add explicit casts for apreq_param_charset_* to keep c++ compilers happy. |
65 |
|
66 |
|
67 |
@section v2_06_dev Changes with libapreq2-2.06-dev (released July 20, 2005) |
68 |
|
69 |
|
70 |
- C API [Marc Gràcia, joes] |
71 |
Fix apreq_decode(v) when iso-latin-1 chars appear |
72 |
at the end of an encoded string. |
73 |
|
74 |
- Perl API [Philip M. Gollucci] |
75 |
Fix "Attempt to free temp prematurely" error in apreq_xs_croak(). |
76 |
|
77 |
- C API [Philip M. Gollucci] |
78 |
Add mod_apreq2 to httpd's server tokens. |
79 |
|
80 |
- Perl API [joes] |
81 |
Drop support for $req->env(), which also died with 2.05-dev. |
82 |
|
83 |
- Perl API [joes] |
84 |
Support for table set/add/delete methods is formally withdrawn. |
85 |
Technically this feature died with the module API refactoring in |
86 |
2.05-dev. |
87 |
|
88 |
- C API [max] |
89 |
Right-hand limit of apreq_brigade_move() is declared as "excluding", |
90 |
but APR_RING_UNSPLICE() wants an "including" right-hand limit. Fixed |
91 |
this by passing the previous bucket. |
92 |
|
93 |
- Perl API [joes] |
94 |
Drop support for Apache2::Request::new's HOOK_DATA. |
95 |
UPLOAD_HOOK now takes only two arguments: ($upload, $data). |
96 |
|
97 |
- Perl API [joes] |
98 |
Drop support for Apache2::Cookie::Jar::new's VALUE_CLASS. |
99 |
2.05-dev broke that API, and it's not worth trying to fix. |
100 |
People who need that should use APR::Request::Cookie::Table's |
101 |
cookie_class() API instead. |
102 |
|
103 |
- Perl API [joes] |
104 |
Fix cookie domain/path munging in Apache2::Cookie::new(). |
105 |
|
106 |
|
107 |
@section v2_05_dev Changes with libapreq2-2.05-dev (released May 5, 2005) |
108 |
|
109 |
|
110 |
- Win32 build [Randy Kobes] |
111 |
Have top-level 'nmake', 'nmake test', and 'nmake install' |
112 |
targets, respectively, also include building, testing, and |
113 |
installing the corresponding perl glue targets. |
114 |
|
115 |
- C API [geoff] |
116 |
Minimum httpd version is now 2.0.48, which includes the official |
117 |
apr 0.9.4 release. |
118 |
|
119 |
- C API [Max Kellermann] |
120 |
Fix apreq_quote. |
121 |
|
122 |
- Perl API [joes] |
123 |
Remove Apache2::Request::args. WARNING: through inheritance, |
124 |
args() now maps to Apache2::RequestRec::args. Folks that want |
125 |
the pre-2.05-dev behavior need to invoke APR::Request::args by name. |
126 |
|
127 |
- C API [joes, Max Kellermann] |
128 |
Add apreq_initialize, apreq_pre_initialize and apreq_post_initialize. |
129 |
These are not thread-safe operations, so applications need to ensure |
130 |
they are invoked (in the correct sequence) prior to using any apreq2 |
131 |
modules. |
132 |
|
133 |
- C, Perl API [joes] |
134 |
Add pool, bucket_alloc to apreq_handle_t. |
135 |
|
136 |
- Perl API [joes] |
137 |
Drop $data argument from UPLOAD_HOOK, and also drop HOOK_DATA option. |
138 |
Perl folks should use a closure instead of passing in context data. |
139 |
|
140 |
- Perl API [joes] |
141 |
Move bake, bake2 to Apache2::Cookie, now requiring |
142 |
an extra $r argument. Also ""-operator is mapped |
143 |
to as_string() for Apache2::Cookie; but APR::Request::Cookie |
144 |
maps it to value(). |
145 |
|
146 |
- C API [joes] |
147 |
Remove header_in & header_out from apreq_module_t. |
148 |
Remove apreq_ua_cookie_version() and apreq_cookie_bake*(). |
149 |
Remove cookie2 argument to apreq_handle_custom(). |
150 |
|
151 |
- C API [joes] |
152 |
s/APREQ/APREQ2/g in webserver configuration directives. |
153 |
|
154 |
- C API [Igor Shevchenko, Philip Gollucci] |
155 |
Fix segfault in mfd parser caused by parts w/ empty param names. |
156 |
|
157 |
- C API [joes] |
158 |
Add apreq_cp1252_to_utf8(). |
159 |
|
160 |
- C, Perl API [joes] |
161 |
Add charset support for params and couple the SvUTF8 flag |
162 |
to the param's taint flag. |
163 |
|
164 |
- C API [joes] |
165 |
Replace v->size with v->nlen + v->dlen. |
166 |
Added supporting apreq_value_table_add(). |
167 |
|
168 |
- C API [joes] |
169 |
Remove apreq_cookie_attr(). |
170 |
|
171 |
- C API [joes] |
172 |
- Add apreq_error.h, apreq_module.h. |
173 |
- Rename apreq_run* and apreq_make* funcs to conform with |
174 |
apreq_$obj_$meth scheme. |
175 |
- Replace c->version & c->secure with flags. |
176 |
- Parsers are assumed to be working with external data, so the |
177 |
cookies & params they produce are marked tainted. |
178 |
|
179 |
- C API [joes] |
180 |
apreq_parse_cookie_header() failed to parse RFC Cookie headers which |
181 |
contained no space chars after the '$Version=1' preamble. |
182 |
|
183 |
- C API [joes] |
184 |
Reorganize around include/, library/, and module/ dirs. |
185 |
|
186 |
- C Tests [joes] |
187 |
Replace CuTest-based tests with custom TAP-compliant framework. |
188 |
|
189 |
- C API [Max Kellermann] |
190 |
Continue the API improvements: |
191 |
|
192 |
- Convert APREQ_RUN_PARSER and APREQ_RUN_HOOK to inline, and downcase them. |
193 |
- Remove apreq_memmem. |
194 |
- Convert apreq_(un)escape to inline. |
195 |
- apreq_escape does not create an apreq_value_t*. |
196 |
- Initialize default_parsers explicitly to NULL. |
197 |
- Convert APREQ_BRIGADE_COPY to inline, and downcase it. |
198 |
- Lowercase APREQ_BRIGADE_SETASIDE, APREQ_BRIGADE_COPY. |
199 |
- Convert apreq_cookie_name and apreq_cookie_value macros to inline. |
200 |
- Convert apreq_param_name, apreq_param_value, apreq_param_info, and |
201 |
apreq_param_brigade to inline. |
202 |
|
203 |
- C API [joes] |
204 |
Widespread API refactorization to remove apreq_jar_t and apreq_request_t: |
205 |
|
206 |
- Header includes reorganized; apreq_parsers.h added (back again). |
207 |
- Replaced apreq_jar_t and apreq_request_t with single apreq_env_handle_t. |
208 |
- Added const qualifier to "v" attribute of apreq_cookie_t and apreq_param_t. |
209 |
- Use union type-puns to drop const qualifiers inside the new |
210 |
apreq_value_to_cookie and apreq_value_to_param implementations |
211 |
(gcc generates same object code as the macro versions did). |
212 |
- Moved "flags" attribute from apreq_value_t to apreq_cookie_t and apreq_param_t. |
213 |
- Remove env argument from hooks and parsers. |
214 |
- Reduce apreq_env_module to minimal set of operations. |
215 |
- Replace apreq_log calls with apreq-specific error codes. |
216 |
- Hooks are called on each body param now, not just during file uploads. |
217 |
- Tie the cgi handle to its creator pool. |
218 |
|
219 |
Detailed changes by header file: |
220 |
|
221 |
[apreq.h] |
222 |
- Remove flags from apreq_value_t. |
223 |
- Remove const qualifier from apreq_value_t's "name" attribute. |
224 |
- Remove apreq_value_merge* and apreq_value_copy*. |
225 |
- Remove apreq_char_to_value, apreq_strtoval, and apreq_strlen. |
226 |
- Move apreq_enctype to apreq_env.h. |
227 |
- Move apreq_env_handle_t struct definition to apreq_env.h |
228 |
- Change signature of apreq_decode. |
229 |
- Move apreq_brigade_concat here, changed its signature and improved it alot. |
230 |
- Remove apreq_brigade_spoolfile. |
231 |
- Dropped APREQ_*_ENCTYPE, renamed some APREQ_$foo defaults APREQ_DEFAULT_$foo. |
232 |
- Added APREQ_ERROR_*. |
233 |
|
234 |
[apreq_cookie.h] |
235 |
- Remove apreq_env.h include. |
236 |
- Remove apreq_jar_t. |
237 |
- Add "flags" to apreq_cookie_t, add const qualifier to its "v" attr. |
238 |
- Remove apreq_jar* functions. |
239 |
- Add apreq_parse_cookie_header. |
240 |
- Move apreq_cookie, apreq_cookie_bake(2), and |
241 |
apreq_ua_cookie_version to apreq_env.h. |
242 |
|
243 |
[apreq_params.h] |
244 |
- Remove apreq_env.h include. |
245 |
- Remove apreq_request_t. |
246 |
- Add "flags" to apreq_param_t, and const qualifier to its "v" attr. |
247 |
- Rename "bb" attribute "upload" in apreq_param_t. |
248 |
- Remove apreq_request* functions. |
249 |
- Remove apreq_parse_request. |
250 |
- Changed apreq_decode_param signature. |
251 |
- Replace env argument with apr_table_t in apreq_params_as_array, |
252 |
apreq_params_as_string, |
253 |
- Move remaining apreq_param* to apreq_env.h. |
254 |
- Move parser and hook sections to apreq_parsers.h. |
255 |
- Change apreq_upload(s) old apreq_request_t arg to apr_table_t. |
256 |
|
257 |
[apreq_parsers.h] |
258 |
- Acquire the hook and parser sections of original apreq_params.h. |
259 |
- Remove env argument from APREQ_PARSER_ARGS and APREQ_HOOK_ARGS |
260 |
- Augment apreq_hook_t and apreq_parser_t to replace missing env features. |
261 |
- Change apreq_make_parser and apreq_make_hook signatures. |
262 |
- Rename apreq_add_hook to apreq_parser_add_hook, returning apr_status_t. |
263 |
- Change apreq_parser signature. |
264 |
|
265 |
[apreq_env.h] |
266 |
- Remove read, log, pool, bucket_alloc, request, jar, and query_string methods. |
267 |
- Include apreq_parsers.h. |
268 |
- Reorganize apreq_env_module_t to provide hook, parser, jar, args, |
269 |
& body table ops. |
270 |
- Rename max_brigade to "brigade_limit", max_body to "read_limit". |
271 |
- Change related module sigs, including temp_dir, to get/set methods. |
272 |
- Add parser and read_limit args to apreq_env_make_custom_handle. |
273 |
- Drop "name" arg and APREQ_ENV_MODULE =~ s/_ENV//. |
274 |
- s/apreq_env_make/apreq_handle/ in the handle constructor names. |
275 |
|
276 |
[mod_apreq.c, apreq_env_apache2.h] |
277 |
- Changed APREQ_Max* configs to APREQ_BrigadeLimit and APREQ_ReadLimit. |
278 |
- Handle constructor renamed apreq_handle_apache2. |
279 |
|
280 |
- C API [joes] |
281 |
Make our "libtool current interface" number depend on apr's |
282 |
major number. This allows libapreq2 to be installed into a |
283 |
system-wide location while avoiding ABI conflicts arising from |
284 |
our apr-based interfaces. |
285 |
|
286 |
- C API [Max Kellermann] |
287 |
Introduce apreq_env_handle_t to replace the void *env usage. |
288 |
Also added apreq_env_custom for making private handles, and new |
289 |
apreq_env_apache2.h to let mod_apreq export apreq_env_make_apache2. |
290 |
|
291 |
- C API [Max Kellermann] |
292 |
Rename apreq_env_t to apreq_env_module_t, to prepare for |
293 |
a new thread-safe apreq_env API. |
294 |
|
295 |
- C API [Max Kellermann] |
296 |
mod_apreq must check the return value of apreq_brigade_concat |
297 |
to avoid a RAM-consuming infinite loop. A bad APREQ_TempDir |
298 |
setting can cause this situation. |
299 |
|
300 |
- C API [joes] |
301 |
Provide workaround for chunked trailers bug in ap_http_filter. |
302 |
|
303 |
- C, Perl API [joes] |
304 |
Several upload-related bugfixes: |
305 |
1) apreq_upload and apreq_uploads did not search the full body table, |
306 |
2) $upload->slurp and $io->read did not autovivify the resultant string. |
307 |
|
308 |
- C API [joes] |
309 |
Add "flags" attribute to apreq_value_t, planning for charset support. |
310 |
This is an ABI change, starting with libapreq2.so.2.0.24. |
311 |
|
312 |
- C API [joes] |
313 |
Add apreq_env_bucket_alloc() to get an allocator directly from the |
314 |
environment instead of creating them from a pool. This is an |
315 |
ABI change, starting with libapreq2.so.2.0.23. |
316 |
|
317 |
- Build system [joes] |
318 |
Add --with-apache2-httpd option so users can override apxs's |
319 |
notion of where the httpd executable is. XSBuilder's header |
320 |
parser runs from buildconf now instead of configure, so we |
321 |
will include those tables in the release tarball. buildconf |
322 |
gets an additional --with-perl option for running the xsbuilder.pl |
323 |
parsing script. The XS generation code in xsbuilder.pl has moved |
324 |
to glue/perl/Makefile.PL. |
325 |
|
326 |
- Perl API [joes] |
327 |
Allow ctors for Apache::Cookie, Apache::Cookie::Jar |
328 |
and Apache:::Request to accept Apache::Request objects |
329 |
(instead of requiring an Apache::RequestRec object). |
330 |
This thread details the bug |
331 |
http://thread.gmane.org/gmane.comp.apache.mod-perl/15727 |
332 |
|
333 |
- C API [Bojan Smojver] |
334 |
Bake cookies with err_headers_out so they are |
335 |
sent on non-2xx server responses (ie. a 304 redirect). |
336 |
Also ensure that headers are copied with apr_table_add |
337 |
instead of apr_table_addn. Since apreq_cookie_bake() |
338 |
allocates from the stack, the Set-Cookie headers would |
339 |
occasionally get mangled without this patch. |
340 |
|
341 |
- C API [joes] |
342 |
Add apreq_register_parser(), which allows users to add |
343 |
their own parsers to apreq_parser()'s recognized MIME types. |
344 |
|
345 |
- C API [joes] |
346 |
Support "multipart/mixed" file uploads. |
347 |
Support XForms' "multipart/related" enctype. |
348 |
|
349 |
- C API [joes] |
350 |
Add apreq_hook_apr_xml_parser(), which is a simple wrapper |
351 |
hook around APR's expat-based apr_xml_parser. Add a generic |
352 |
parser apreq_parse_generic() to parse arbitrary enctypes using |
353 |
the hook API. |
354 |
|
355 |
|
356 |
@section v2_04_dev Changes with libapreq2-2.04-dev (released August 30, 2004) |
357 |
|
358 |
|
359 |
- Perl API [joes] |
360 |
Add TAINT checks, marking all parsed data as tainted. |
361 |
|
362 |
- C API [joes] |
363 |
Add body_status attribute to apreq_request_t, to allow the both |
364 |
environment and the parser to report any errors encountered. |
365 |
|
366 |
- C API [randyk, joes] |
367 |
Cookie parser was locking up on non-alphanumeric chars in cookie names. |
368 |
Also RFC Cookie attributes are always checked for quotes during bake(2), |
369 |
and the quotes are now stripped from incoming RFC cookies during parsing |
370 |
(but they are never stripped from the actual cookie value). |
371 |
|
372 |
- Perl API [joes] |
373 |
Apache::Cookie::Jar->new accepts a VALUE_CLASS argument, which effectively |
374 |
blesses all the jar's cookies into that class, which simplifies subclassing |
375 |
Apache::Cookie. Accordingly Apache::Cookie->freeze($value) no longer accepts |
376 |
a freeze()-able object in $value. |
377 |
|
378 |
- C API [Markus Wichitill, randyk, joes] |
379 |
Drop APR_DELONCLOSE from apreq_file_mktemp implementation and install |
380 |
apreq_file_cleanup. When passed to apr_file_open on Win32, APR_DELONCLOSE |
381 |
sets the FILE_SHARED_DELETE flag, which is, unfortunately, a property that |
382 |
is preserved across NTFS "hard" links. This breaks apps that link() |
383 |
the temp file to a permanent location, and subsequently expect to open it |
384 |
without FILE_SHARED_DELETE before the original tempfile is closed+deleted. |
385 |
In fact, even Apache::Upload does this, so it is a common enough event that |
386 |
the apreq_file_cleanup workaround is necessary. |
387 |
|
388 |
- C API [Ken Burcham, joes] |
389 |
Fix bug in url parser that occurs when a %XX-encoded sequence |
390 |
is split across multiple buckets. Added apreq_decode_decodev |
391 |
to make this problem less inconvenient. |
392 |
|
393 |
- Perl API [joes] |
394 |
Exception objects inherit from the object which raised it, |
395 |
which allows $@ to invoke its methods with impunity (exceptions |
396 |
are disabled for objects which derive from an exception class). |
397 |
|
398 |
- Perl API [joes] |
399 |
Implement HOOK_DATA and UPLOAD_HOOK. |
400 |
|
401 |
- Perl API [joes] |
402 |
Add safe XS wrappers for $table->add, $table->set, $table->STORE, |
403 |
and $table_class->new. |
404 |
|
405 |
- Perl API [joes] |
406 |
Add exceptions to $upload->link, $upload->tempname, $upload->slurp, |
407 |
and $cookie->set_attr. Return value of $upload->slurp is now the |
408 |
upload length. Also document new $upload->io. |
409 |
|
410 |
- C API [joes] |
411 |
Restrict all apr_status_t codes to APR_SUCCESS, APR_INCOMPLETE, |
412 |
APR_EGENERAL, APR_EINIT, APR_ENOTIMPL, since any others will |
413 |
generate confusing error messages from apr_strerror. |
414 |
|
415 |
- Perl API [joes] |
416 |
Added $upload->io with a TIEHANDLE API layered over APR::Brigade. $upload->fh |
417 |
remains implemented as an APR::PerlIO object, which is seekable but less efficient |
418 |
and currently suffers some portability issues associated with largefile support |
419 |
in perl and apr. |
420 |
|
421 |
- Perl API [joes] |
422 |
Added apreq_xs_croak for throwing APR::Error exceptions and included |
423 |
error-checking on $req->param, $req->args, $req->body, $req->upload, |
424 |
and $jar->get. |
425 |
|
426 |
- Perl API [joes] |
427 |
Added $jar->status, $req->args_status and $req->body_status to report |
428 |
parsing errors. Also add $upload->tempname per user request. |
429 |
|
430 |
- C API [joes] |
431 |
Dropped status attribute of apreq_value_t. Added status field to |
432 |
apreq_jar_t and added args_status field to apreq_request_t. Parsers |
433 |
also must return their public status code when a NULL brigade is passed. |
434 |
apreq_hook_disable_uploads() is also added. |
435 |
|
436 |
This is an ABI change affecting all versions of libapreq2 prior to 2.0.12. |
437 |
|
438 |
- Perl API [joes] |
439 |
$upload->info returns a proper APR::Table object now. Also implemented |
440 |
$upload->size, $upload->fh, and $upload->type. |
441 |
|
442 |
- C API [Jean-François Meesse] |
443 |
mfd parser fails to parse CRLF-terminated files when the terminating |
444 |
boundary string is at the start of a new bucket. This is reportedly |
445 |
a common event for PDF files uploaded with Netscape 7. |
446 |
|
447 |
- Perl API [joes] |
448 |
Add back-compat support for Apache::Cookie->fetch() via |
449 |
Apache->request. |
450 |
|
451 |
- C API [joes] |
452 |
Add MaxBody, MaxBrigade, and TempDir per-dir directives to mod_apreq |
453 |
filter. |
454 |
|
455 |
- C API [joes] |
456 |
Replace free/tempnam dependency in apreq_file_mktemp() with |
457 |
apr_temp_dir_get(). Add additional gcc warning flags when |
458 |
--enable-maintainer-mode is set. |
459 |
|
460 |
- C API [joes, Scott Hutton] |
461 |
Replace apreq_brigade_copy with more effective APREQ_BRIGADE_COPY |
462 |
macro. Also introduce APREQ_BRIGADE_SETASIDE to deal with buckets |
463 |
that need to be set aside for use in future function calls. mod_ssl |
464 |
generates transient buckets which tickled this bug. |
465 |
|
466 |
- Perl API [joes] |
467 |
Separate Apache::Upload module from Apache::Request for |
468 |
better organization. |
469 |
|
470 |
|
471 |
@section v2_03_dev Changes with libapreq2-2.03-dev (released June 12, 2004) |
472 |
|
473 |
|
474 |
- C API [joes] |
475 |
"Objectify" cookie/jar API: s/apreq_(make|serialize)_cookie/apreq_cookie_$1/ |
476 |
and reordering args so the cookie/jar object is always the first argument. |
477 |
Macros added to provide source-compatibility with the old names. |
478 |
|
479 |
- Perl API [joes] |
480 |
Added $upload->slurp($data), which reads the contents of the file |
481 |
upload "$upload" into the scalar "$data". |
482 |
|
483 |
- C API [joes, randyk] |
484 |
apreq_run_(hook|parser) are macros, so they are capitalized now. |
485 |
Fixed apreq_params_as_string() and added apreq_params_as_array(). |
486 |
Reworked definitions of APREQ_DECLARE_HOOK, APREQ_DECLARE_PARSER |
487 |
and apreq_(parser|hook)_t, hopefully to be more Win32 friendly. |
488 |
Also updated the documentation. |
489 |
|
490 |
- C API [joes] |
491 |
Compensate for a missing CRLF in empty file upload block, which |
492 |
actually complies with RFC 2046 Section 5.1.1. Konqueror (version unknown) |
493 |
and Mozilla 0.9.7 are known to emit such blocks. |
494 |
|
495 |
- Perl API [joes] |
496 |
$req->upload() in list context failed to filter out non-uploads. |
497 |
Also $req->upload("nonexistent-key-name") segfaults. |
498 |
|
499 |
- Perl test suite |
500 |
t/TEST.PL must run parent class' pre_configure to get the |
501 |
configuration right |
502 |
|
503 |
- C API [joes] |
504 |
apreq_brigade_concat() wasn't supplying the final EOS bucket |
505 |
to large brigades (>256K), which somtimes caused the prefetch |
506 |
loop in mod_apreq.c's apreq_filter() to hang. |
507 |
|
508 |
- Documentation [joes] |
509 |
CHANGES file reformatted, removing dates & other clutter |
510 |
as Stas suggests. |
511 |
|
512 |
- C API [joes] |
513 |
Rewrote cgi_read() in apreq_env.c and reworked mod_apreq.c |
514 |
to enforce apreq_env_max_body() settings. |
515 |
|
516 |
- C API [joes] |
517 |
Fixed bug in url_parser code- missing context brigade was |
518 |
needed to track key-value pairs which span multiple buckets. |
519 |
|
520 |
- C API [joes] |
521 |
API modifications: removed struct apreq_cfg_t, adding |
522 |
new apreq_env hooks max_body, max_brigade_len, and temp_dir. |
523 |
Folded apreq_parsers.h into apreq_params.h and modified the arguments |
524 |
to apreq_run_parser() and apreq_run_hook(). Renamed |
525 |
apreq_parser_t's content_type as enctype and apreq_copy_brigade() |
526 |
as apreq_brigade_copy(). |
527 |
These changes make libapreq2.so.2.0.5 incompatible with earlier |
528 |
versions. |
529 |
|
530 |
- Perl API [stas] |
531 |
Include ppport.h from blead-perl to support older perls. |
532 |
Add a proper support for ithreads. |
533 |
|
534 |
- C API [Swen Schillig, joes] |
535 |
Fixed bug in calculation of Netscape cookie expiration dates. |
536 |
apr_time_t is measured in microseconds, not seconds, which |
537 |
threw off the arithmetic; apr_time_from_sec was needed for |
538 |
the conversion. |
539 |
|
540 |
- C API [Max Kellermann] |
541 |
Fix segfault caused by invalid %-escape sequence in query string. |
542 |
|
543 |
|
544 |
@section v2_02_dev Changes with libapreq2-2.02-dev (released Nov 15, 2003) |
545 |
|
546 |
|
547 |
- Perl API [joes] |
548 |
Fix bogus pool/cookie initializers in Apache::Cookie::set_attr(), |
549 |
which caused Apache::Cookie::new to segfault. Bug |
550 |
first reported to modperl list by Wolfgang Kubens. |
551 |
|
552 |
|
553 |
@section v2_01_dev Changes with libapreq2-2.01-dev (released Nov 10, 2003) |
554 |
|
555 |
|
556 |
- build system [joes] |
557 |
Skip Apache::Test tests in env/ when Apache::Test is unavailable. |
558 |
This allows the C API to be build and installed without requiring |
559 |
Apache::Test (it is still a requirement for compiling the perl glue). |
560 |
|
561 |
- C API mod_apreq.c [joes] |
562 |
Parser errors were creeping into the return value of apreq_filter, |
563 |
which breaks the "transparent tee" paradigm. This caused bogus |
564 |
"400 Bad Request" responses (first reported by Vladimir Dudo) |
565 |
to occur when libapreq2 was used by an output filter during a GET |
566 |
request (handled by apache2's default handler). The test suite |
567 |
has been updated accordingly. |
568 |
|
569 |
- C API [joes] |
570 |
Incorporate libapreq_cgi into libapreq2 as the default environment, |
571 |
and add apreq_env_t and initializer apreq_env_module() to manage the |
572 |
environment at runtime (determining the environment at load-time |
573 |
was problematic on non-ELF systems). |
574 |
|
575 |
|
576 |
@section v2_0_0 Changes with libapreq2-2.00-dev (Oct 25, 2003) |
577 |
|
578 |
|
579 |
- C API: libapreq_cgi.c [randyk, joes] |
580 |
CGI environment defined by env/libapreq_cgi.c is functional |
581 |
(with tests added to env/t). This library may soon be incorporated |
582 |
directly into libapreq2 as a default enviroment. |
583 |
|
584 |
- C API: mod_apreq.c [joes] |
585 |
Added ctx->saw_eos to ensure we don't read from upstream filters |
586 |
after receiving an eos bucket. Otherwise it was possible for |
587 |
two eos buckets to appear when a prefetch read is involved, which |
588 |
breaks other modules like mod_proxy. This bug was uncovered by |
589 |
Philippe Chiasson. mod_apreq's apreq_env_majic_number bumped to |
590 |
reflect the added fixes. |
591 |
|
592 |
- configure: --enable-perl-glue [joes] |
593 |
The --enable-perl-glue option integrates the perl glue into the |
594 |
normal Unix build cycle. It is disabled by default, but is silently |
595 |
reenabled if the user configures the source tree via Makefile.PL. |
596 |
|
597 |
- C API [joes] |
598 |
Added apreq_header_attribute() and fixed mfd parser to allow |
599 |
"charset" attribute to appear in the Content-Type header. Sven |
600 |
Geisler points out that Opera 7.20 does generate such headers. |
601 |
|
602 |
- C API [joes] |
603 |
Added versioning API following http://apr.apache.org/versioning.html |
604 |
apreq_env renamed apreq_env_name, and apreq_env_magic_number added |
605 |
to provide versioning for environments (modules). The header files |
606 |
are now installed to "include/apreq2", and the library is renamed |
607 |
"libapreq2". Also added an apreq2-config script based on apu-config. |
608 |
|
609 |
- configure: static mod_apreq.c [Bojan Smojver, joes] |
610 |
Add --with-apache2-src configure option, along with --with-apr-config |
611 |
and --with-apu-config, and provide support for compiling mod_apreq |
612 |
into httpd as a static apache module. |
613 |
|
614 |
- C API: mod_apreq.c [joes] |
615 |
Support for internal redirects added to the mod_apreq filter. |
616 |
This ensures any POST data prefetched in the main request |
617 |
gets passed along to the subrequest handler(s). |
618 |
|
619 |
- C bugfix: apreq_decode [Graham Clark] |
620 |
If the source and destination strings are represented by the same |
621 |
pointer - e.g. if called as apreq_unescape(s) - string s is modified |
622 |
incorrectly in general. Patch includes new unit test. |
623 |
|
624 |
- Perl API [joes] |
625 |
Added $req->parse, $req->status, & "preparse" logic |
626 |
to $req->param & $req->upload. |
627 |
|
628 |
- C API [joes] |
629 |
Added "preparse" logic to apreq_params & apreq_uploads |
630 |
to bring behavior in line with libapreq-1.x. |
631 |
|
632 |
- C API [joes] |
633 |
Dropped param->charset. |
634 |
Make apreq_brigade_concat public, so mod_apreq can use it |
635 |
for its ctx->spool brigade. |
636 |
|
637 |
- Documentation [joes] |
638 |
Updated Cookie_pod to reflect API changes over v1.X. |
639 |
|
640 |
- Documentation [joes] |
641 |
Added doxygen links to Apache::Request and Apache::Cookie |
642 |
perl docs. |
643 |
|
644 |
- C API [joes] |
645 |
Added apreq_copy_brigade(bb) to apreq.h. |
646 |
|
647 |
- C API [joes] |
648 |
The new filter-based design required a complete |
649 |
departure from libapreq-1.X codebase. libapreq-2 |
650 |
is based solely on APR, and to be fully functional, |
651 |
requires a supporting environment similar to Apache-2. |
652 |
A person wishing to port libapreq-2 to a new environment |
653 |
needs to provide definitions for the declarations in apreq_env.h. |
654 |
|
655 |
- Perl API [joes] |
656 |
Aggregates are always collected into an APR::Table-based package. |
657 |
New table packages: Apache::Cookie::Table, Apache::Request::Table, |
658 |
and Apache::Upload::Table. |
659 |
|
660 |
- Perl API [joes] |
661 |
Apache::Cookie->fetch now requires an "environment" argument ($r). |
662 |
Its return value is blessed into the Apache::Cookie::Jar class. |
663 |
|
664 |
- Perl API [joes] |
665 |
Two new request lookup functions: |
666 |
-# $req->args - param lookup using only the query string |
667 |
-# $req->body - param lookup using only the POST data |
668 |
|
669 |
|
670 |
**/ |