Not building on i386
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 22 Mar 2023 06:49:31 UTC
Hello
When trying to build www/apache24 on the i386 platform, an error occurs while building the http2 module:
h2_util.c:1183:23: error: result of comparison of constant 9223372036854775807 with expression of type 'apr_size_t' (aka 'unsigned int') is always false [-Werror,-Wtautological-constant-out-of-range-compare]
&& b->length > APR_INT64_MAX)
~~~~~~~~~ ^ ~~~~~~~~~~~~~
1 error generated.
*** Error code 1
Stop.
make[6]: stopped in /usr/obj/ports/usr/ports/www/apache24/work/httpd-2.4.56/modules/http2
*** Error code 1
Stop.
make[5]: stopped in /usr/obj/ports/usr/ports/www/apache24/work/httpd-2.4.56/modules/http2
*** Error code 1
Stop.
make[4]: stopped in /usr/obj/ports/usr/ports/www/apache24/work/httpd-2.4.56/modules
*** Error code 1
Stop.
make[3]: stopped in /usr/obj/ports/usr/ports/www/apache24/work/httpd-2.4.56
*** Error code 1
Stop.
make[2]: stopped in /usr/obj/ports/usr/ports/www/apache24/work/httpd-2.4.56
*** Error code 1
As a result, Apache cannot be built on a 32-bit system. A patch is required to resolve this issue.
-------------------------------
The original function where the error occurs
/*******************************************************************************
* h2_util for bucket brigades
******************************************************************************/
static void fit_bucket_into(apr_bucket *b, apr_off_t *plen)
{
/* signed apr_off_t is at least as large as unsigned apr_size_t.
* Problems may arise when they are both the same size. Then
* the bucket length *may* be larger than a value we can hold
* in apr_off_t. Before casting b->length to apr_off_t we must
* check the limitations.
* After we resized the bucket, it is safe to cast and substract.
*/
if ((sizeof(apr_off_t) == sizeof(apr_int64_t)
&& b->length > APR_INT64_MAX)
|| (sizeof(apr_off_t) == sizeof(apr_int32_t)
&& b->length > APR_INT32_MAX)
|| *plen < (apr_off_t)b->length) {
/* bucket is longer the *plen */
apr_bucket_split(b, *plen);
}
*plen -= (apr_off_t)b->length;
}
--------------------------------
I do so in order to somehow compile Apache
static void fit_bucket_into(apr_bucket *b, apr_off_t *plen)
{
/* signed apr_off_t is at least as large as unsigned apr_size_t.
* Problems may arise when they are both the same size. Then
* the bucket length *may* be larger than a value we can hold
* in apr_off_t. Before casting b->length to apr_off_t we must
* check the limitations.
* After we resized the bucket, it is safe to cast and substract.
*/
if ((sizeof(apr_off_t) == sizeof(apr_int32_t)
&& b->length > APR_INT32_MAX)
|| *plen < (apr_off_t)b->length) {
/* bucket is longer the *plen */
apr_bucket_split(b, *plen);
}
*plen -= (apr_off_t)b->length;
}
But as intended, this is not entirely correct. We need a beautiful and correct solution to correct the situation
--
Eugene <eval@veng.tk>