summaryrefslogtreecommitdiff
path: root/apr-1.7.0-r1891269+.patch
diff options
context:
space:
mode:
Diffstat (limited to 'apr-1.7.0-r1891269+.patch')
-rw-r--r--apr-1.7.0-r1891269+.patch239
1 files changed, 239 insertions, 0 deletions
diff --git a/apr-1.7.0-r1891269+.patch b/apr-1.7.0-r1891269+.patch
new file mode 100644
index 0000000..1949d1a
--- /dev/null
+++ b/apr-1.7.0-r1891269+.patch
@@ -0,0 +1,239 @@
+# ./pullrev.sh 1891269 1891198 1891196
+http://svn.apache.org/viewvc?view=revision&revision=1891269
+http://svn.apache.org/viewvc?view=revision&revision=1891198
+http://svn.apache.org/viewvc?view=revision&revision=1891196
+
+--- apr-1.7.0/include/arch/unix/apr_arch_thread_mutex.h
++++ apr-1.7.0/include/arch/unix/apr_arch_thread_mutex.h
+@@ -33,8 +33,10 @@
+ struct apr_thread_mutex_t {
+ apr_pool_t *pool;
+ pthread_mutex_t mutex;
++#ifndef HAVE_PTHREAD_MUTEX_TIMEDLOCK
+ apr_thread_cond_t *cond;
+ int locked, num_waiters;
++#endif
+ };
+ #endif
+
+--- apr-1.7.0/locks/unix/thread_mutex.c
++++ apr-1.7.0/locks/unix/thread_mutex.c
+@@ -102,6 +102,7 @@
+ {
+ apr_status_t rv;
+
++#ifndef HAVE_PTHREAD_MUTEX_TIMEDLOCK
+ if (mutex->cond) {
+ apr_status_t rv2;
+
+@@ -133,6 +134,7 @@
+
+ return rv;
+ }
++#endif
+
+ rv = pthread_mutex_lock(&mutex->mutex);
+ #ifdef HAVE_ZOS_PTHREADS
+@@ -148,6 +150,7 @@
+ {
+ apr_status_t rv;
+
++#ifndef HAVE_PTHREAD_MUTEX_TIMEDLOCK
+ if (mutex->cond) {
+ apr_status_t rv2;
+
+@@ -177,6 +180,7 @@
+
+ return rv;
+ }
++#endif
+
+ rv = pthread_mutex_trylock(&mutex->mutex);
+ if (rv) {
+@@ -281,6 +285,7 @@
+ {
+ apr_status_t status;
+
++#ifndef HAVE_PTHREAD_MUTEX_TIMEDLOCK
+ if (mutex->cond) {
+ status = pthread_mutex_lock(&mutex->mutex);
+ if (status) {
+@@ -303,6 +308,7 @@
+
+ mutex->locked = 0;
+ }
++#endif
+
+ status = pthread_mutex_unlock(&mutex->mutex);
+ #ifdef HAVE_ZOS_PTHREADS
+@@ -318,9 +324,12 @@
+ {
+ apr_status_t rv, rv2 = APR_SUCCESS;
+
++#ifndef HAVE_PTHREAD_MUTEX_TIMEDLOCK
+ if (mutex->cond) {
+ rv2 = apr_thread_cond_destroy(mutex->cond);
+ }
++#endif
++
+ rv = apr_pool_cleanup_run(mutex->pool, mutex, thread_mutex_cleanup);
+ if (rv == APR_SUCCESS) {
+ rv = rv2;
+--- apr-1.7.0/random/unix/sha2.c
++++ apr-1.7.0/random/unix/sha2.c
+@@ -425,7 +425,7 @@
+ usedspace = freespace = 0;
+ }
+
+-void apr__SHA256_Final(sha2_byte digest[], SHA256_CTX* context) {
++void apr__SHA256_Final(sha2_byte digest[SHA256_DIGEST_LENGTH], SHA256_CTX* context) {
+ sha2_word32 *d = (sha2_word32*)digest;
+ unsigned int usedspace;
+
+@@ -496,7 +496,7 @@
+ usedspace = 0;
+ }
+
+-char *apr__SHA256_End(SHA256_CTX* context, char buffer[]) {
++char *apr__SHA256_End(SHA256_CTX* context, char buffer[SHA256_DIGEST_STRING_LENGTH]) {
+ sha2_byte digest[SHA256_DIGEST_LENGTH], *d = digest;
+ int i;
+
+--- apr-1.7.0/time/unix/time.c
++++ apr-1.7.0/time/unix/time.c
+@@ -142,6 +142,9 @@
+ static const int dayoffset[12] =
+ {306, 337, 0, 31, 61, 92, 122, 153, 184, 214, 245, 275};
+
++ if (xt->tm_mon < 0 || xt->tm_mon >= 12)
++ return APR_EBADDATE;
++
+ /* shift new year to 1st March in order to make leap year calc easy */
+
+ if (xt->tm_mon < 2)
+--- apr-1.7.0/time/win32/time.c
++++ apr-1.7.0/time/win32/time.c
+@@ -54,6 +54,9 @@
+ static const int dayoffset[12] =
+ {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
+
++ if (tm->wMonth < 1 || tm->wMonth > 12)
++ return APR_EBADDATE;
++
+ /* Note; the caller is responsible for filling in detailed tm_usec,
+ * tm_gmtoff and tm_isdst data when applicable.
+ */
+@@ -228,6 +231,9 @@
+ static const int dayoffset[12] =
+ {306, 337, 0, 31, 61, 92, 122, 153, 184, 214, 245, 275};
+
++ if (xt->tm_mon < 0 || xt->tm_mon >= 12)
++ return APR_EBADDATE;
++
+ /* shift new year to 1st March in order to make leap year calc easy */
+
+ if (xt->tm_mon < 2)
+--- apr-1.7.0/file_io/unix/readwrite.c
++++ apr-1.7.0/file_io/unix/readwrite.c
+@@ -146,7 +146,7 @@
+
+ APR_DECLARE(apr_status_t) apr_file_write(apr_file_t *thefile, const void *buf, apr_size_t *nbytes)
+ {
+- apr_size_t rv;
++ apr_size_t rv = APR_SUCCESS;
+
+ if (thefile->buffered) {
+ char *pos = (char *)buf;
+@@ -160,13 +160,14 @@
+ * logically reading from
+ */
+ apr_int64_t offset = thefile->filePtr - thefile->dataRead + thefile->bufpos;
+- if (offset != thefile->filePtr)
+- lseek(thefile->filedes, offset, SEEK_SET);
++ if (offset != thefile->filePtr) {
++ thefile->filePtr = lseek(thefile->filedes, offset, SEEK_SET);
++ if (thefile->filePtr == -1) rv = errno;
++ }
+ thefile->bufpos = thefile->dataRead = 0;
+ thefile->direction = 1;
+ }
+
+- rv = 0;
+ while (rv == 0 && size > 0) {
+ if (thefile->bufpos == thefile->bufsize) /* write buffer is full*/
+ rv = apr_file_flush_locked(thefile);
+@@ -244,12 +245,15 @@
+ */
+ apr_int64_t offset = thefile->filePtr - thefile->dataRead +
+ thefile->bufpos;
+- if (offset != thefile->filePtr)
+- lseek(thefile->filedes, offset, SEEK_SET);
++ if (offset != thefile->filePtr) {
++ thefile->filePtr = lseek(thefile->filedes, offset, SEEK_SET);
++ if (thefile->filePtr == -1) rv = errno;
++ }
+ thefile->bufpos = thefile->dataRead = 0;
+ }
+
+ file_unlock(thefile);
++ if (rv) return rv;
+ }
+
+ if ((bytes = writev(thefile->filedes, vec, nvec)) < 0) {
+--- apr-1.7.0/locks/unix/proc_mutex.c
++++ apr-1.7.0/locks/unix/proc_mutex.c
+@@ -1518,11 +1518,10 @@
+
+ APR_DECLARE(const char *) apr_proc_mutex_defname(void)
+ {
+- apr_status_t rv;
+ apr_proc_mutex_t mutex;
+
+- if ((rv = proc_mutex_choose_method(&mutex, APR_LOCK_DEFAULT,
+- NULL)) != APR_SUCCESS) {
++ if (proc_mutex_choose_method(&mutex, APR_LOCK_DEFAULT,
++ NULL) != APR_SUCCESS) {
+ return "unknown";
+ }
+
+--- apr-1.7.0/memory/unix/apr_pools.c
++++ apr-1.7.0/memory/unix/apr_pools.c
+@@ -1338,7 +1338,7 @@
+ apr_size_t free_index;
+
+ pool_concurrency_set_used(pool);
+- ps.node = active = pool->active;
++ ps.node = pool->active;
+ ps.pool = pool;
+ ps.vbuff.curpos = ps.node->first_avail;
+
+--- apr-1.7.0/test/teststr.c
++++ apr-1.7.0/test/teststr.c
+@@ -394,6 +394,19 @@
+ ABTS_STR_EQUAL(tc, apr_cstr_skip_prefix("", "12"), NULL);
+ }
+
++static void pstrcat(abts_case *tc, void *data)
++{
++ ABTS_STR_EQUAL(tc, apr_pstrcat(p, "a", "bc", "def", NULL),
++ "abcdef");
++ ABTS_STR_EQUAL(tc, apr_pstrcat(p, NULL), "");
++ ABTS_STR_EQUAL(tc, apr_pstrcat(p,
++ "a", "b", "c", "d", "e",
++ "f", "g", "h", "i", "j",
++ "1", "2", "3", "4", "5",
++ NULL),
++ "abcdefghij12345");
++}
++
+ abts_suite *teststr(abts_suite *suite)
+ {
+ suite = ADD_SUITE(suite)
+@@ -412,6 +425,7 @@
+ abts_run_test(suite, string_cpystrn, NULL);
+ abts_run_test(suite, snprintf_overflow, NULL);
+ abts_run_test(suite, skip_prefix, NULL);
++ abts_run_test(suite, pstrcat, NULL);
+
+ return suite;
+ }