Print warning when I execute my own extension function
Hi hackers,
I've read in this blog (
http://big-elephants.com/2015-10/writing-postgres-extensions-part-i/)
and I wrote an extension about base36_encode with c code
but when I executed a query like this below I got a warning below.
```
postgres=# SELECT base36_encode(123);
WARNING: problem in alloc set ExprContext: detected write past chunk end
in block 0x55fb75334d40, chunk 0x55fb75334d68
WARNING: problem in alloc set ExprContext: detected write past chunk end
in block 0x55fb75334d40, chunk 0x55fb75334d68
base36_encode
---------------
3f
(1 row)
```
I don't know what this warning means and how I can fix it.
Thanks
Dong Wook Lee.
Hi,
On Sun, Feb 20, 2022 at 07:23:56PM +0900, Dong Wook Lee wrote:
Hi hackers,
I've read in this blog (
http://big-elephants.com/2015-10/writing-postgres-extensions-part-i/)
and I wrote an extension about base36_encode with c code
but when I executed a query like this below I got a warning below.```
postgres=# SELECT base36_encode(123);
WARNING: problem in alloc set ExprContext: detected write past chunk end
in block 0x55fb75334d40, chunk 0x55fb75334d68
WARNING: problem in alloc set ExprContext: detected write past chunk end
in block 0x55fb75334d40, chunk 0x55fb75334d68
base36_encode
---------------
3f
(1 row)
```I don't know what this warning means and how I can fix it.
It means that you have some problem in your memory allocation. You can refer
to src/backend/utils/mmgr/aset.c for more details on those safety checks.
I found a source code line that prints warning in the source code
(src/backend/utils/mmgr/aset.c, line 1496)
/*
│ 1492 * Check for overwrite of
padding space in an allocated chunk.
│ 1493 */
│ 1494 if (chunk->aset == (void *)
set && dsize < chsize &&
│ 1495 !sentinel_ok(chunk,
ALLOC_CHUNKHDRSZ + dsize))
│B+>1496 elog(WARNING, "problem
in alloc set %s: detected write past chunk end in block %p, chunk %p",
│ 1497 name, block, chunk);
In my extension c code.
I assigned value at the allocated memory address
and I found this assigned statement occurs warning
should I don't use it like this?
```
char *buffer = palloc(7 * sizeof(char));
unsigned int offset = sizeof(buffer);
buffer[--offset] = '\0'; /* here */
```
2022년 2월 20일 (일) 오후 7:29, Julien Rouhaud <rjuju123@gmail.com>님이 작성:
Show quoted text
Hi,
On Sun, Feb 20, 2022 at 07:23:56PM +0900, Dong Wook Lee wrote:
Hi hackers,
I've read in this blog (
http://big-elephants.com/2015-10/writing-postgres-extensions-part-i/)
and I wrote an extension about base36_encode with c code
but when I executed a query like this below I got a warning below.```
postgres=# SELECT base36_encode(123);
WARNING: problem in alloc set ExprContext: detected write past chunk end
in block 0x55fb75334d40, chunk 0x55fb75334d68
WARNING: problem in alloc set ExprContext: detected write past chunk end
in block 0x55fb75334d40, chunk 0x55fb75334d68
base36_encode
---------------
3f
(1 row)
```I don't know what this warning means and how I can fix it.
It means that you have some problem in your memory allocation. You can refer
to src/backend/utils/mmgr/aset.c for more details on those safety checks.
now I found a bug in this code.
I found the code of this part below is wrong
```
char *buffer = palloc(7 * sizeof(char));
unsigned int offset = sizeof(buffer); // wrong
buffer[--offset] = '\0'; /* here */
```
Thank you for replying
2022년 2월 20일 (일) 오후 11:51, Dong Wook Lee <sh95119@gmail.com>님이 작성:
Show quoted text
I found a source code line that prints warning in the source code
(src/backend/utils/mmgr/aset.c, line 1496)
/*
│ 1492 * Check for overwrite of
padding space in an allocated chunk.
│ 1493 */
│ 1494 if (chunk->aset == (void *)
set && dsize < chsize &&
│ 1495 !sentinel_ok(chunk,
ALLOC_CHUNKHDRSZ + dsize))
│B+>1496 elog(WARNING, "problem
in alloc set %s: detected write past chunk end in block %p, chunk %p",
│ 1497 name, block, chunk);In my extension c code.
I assigned value at the allocated memory address
and I found this assigned statement occurs warning
should I don't use it like this?
```
char *buffer = palloc(7 * sizeof(char));
unsigned int offset = sizeof(buffer);buffer[--offset] = '\0'; /* here */
```
2022년 2월 20일 (일) 오후 7:29, Julien Rouhaud <rjuju123@gmail.com>님이 작성:
Hi,
On Sun, Feb 20, 2022 at 07:23:56PM +0900, Dong Wook Lee wrote:
Hi hackers,
I've read in this blog (
http://big-elephants.com/2015-10/writing-postgres-extensions-part-i/)
and I wrote an extension about base36_encode with c code
but when I executed a query like this below I got a warning below.```
postgres=# SELECT base36_encode(123);
WARNING: problem in alloc set ExprContext: detected write past chunk end
in block 0x55fb75334d40, chunk 0x55fb75334d68
WARNING: problem in alloc set ExprContext: detected write past chunk end
in block 0x55fb75334d40, chunk 0x55fb75334d68
base36_encode
---------------
3f
(1 row)
```I don't know what this warning means and how I can fix it.
It means that you have some problem in your memory allocation. You can refer
to src/backend/utils/mmgr/aset.c for more details on those safety checks.