Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdf164b1

Browse files
committed
[refer #PGPRO-2400] Fix unaligned access to text tile
1 parent7ee4f38 commitdf164b1

File tree

2 files changed

+26
-25
lines changed

2 files changed

+26
-25
lines changed

‎vops.c‎

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1555,7 +1555,7 @@ Datum vops_text_input(PG_FUNCTION_ARGS)
15551555
elog(ERROR,"Invalid vops_char width");
15561556

15571557
var=vops_alloc_text(width);
1558-
result=(vops_tile_hdr*)VARDATA(var);
1558+
result=VOPS_TEXT_TILE(var);
15591559
result->null_mask=0;
15601560
result->empty_mask=0;
15611561
dst= (char*)result+1;
@@ -1617,7 +1617,7 @@ PG_FUNCTION_INFO_V1(vops_text_output);
16171617
Datumvops_text_output(PG_FUNCTION_ARGS)
16181618
{
16191619
structvarlena*var= (structvarlena*)PG_GETARG_POINTER(0);
1620-
vops_tile_hdr*tile=(vops_tile_hdr*)VARDATA(var);
1620+
vops_tile_hdr*tile=VOPS_TEXT_TILE(var);
16211621
char*src= (char*)(tile+1);
16221622
intwidth=VOPS_ELEM_SIZE(var);
16231623
inti;
@@ -1660,8 +1660,8 @@ Datum vops_text_##op(PG_FUNCTION_ARGS)\
16601660
{\
16611661
struct varlena* vl = PG_GETARG_VARLENA_PP(0);\
16621662
struct varlena* vr = PG_GETARG_VARLENA_PP(1);\
1663-
vops_tile_hdr* left =(vops_tile_hdr*)VARDATA(vl);\
1664-
vops_tile_hdr* right =(vops_tile_hdr*)VARDATA(vl);\
1663+
vops_tile_hdr* left =VOPS_TEXT_TILE(vl);\
1664+
vops_tile_hdr* right =VOPS_TEXT_TILE(vl);\
16651665
size_t left_elem_size = VOPS_ELEM_SIZE(vl);\
16661666
size_t right_elem_size = VOPS_ELEM_SIZE(vr);\
16671667
char* l = (char*)(left + 1);\
@@ -1694,7 +1694,7 @@ Datum vops_text_##op##_rconst(PG_FUNCTION_ARGS) \
16941694
{\
16951695
struct varlena* var = PG_GETARG_VARLENA_PP(0);\
16961696
text* t = PG_GETARG_TEXT_P(1);\
1697-
vops_tile_hdr* left =(vops_tile_hdr*)VARDATA(var);\
1697+
vops_tile_hdr* left =VOPS_TEXT_TILE(var);\
16981698
size_t elem_size = VOPS_ELEM_SIZE(var);\
16991699
char* const_data = (char*)VARDATA(t);\
17001700
size_t const_size = VARSIZE(t) - VARHDRSZ;\
@@ -1729,7 +1729,7 @@ Datum vops_text_##op##_lconst(PG_FUNCTION_ARGS)\
17291729
{\
17301730
struct varlena* var = PG_GETARG_VARLENA_PP(1);\
17311731
text* t = PG_GETARG_TEXT_P(0);\
1732-
vops_tile_hdr* right =(vops_tile_hdr*)VARDATA(var);\
1732+
vops_tile_hdr* right =VOPS_TEXT_TILE(var);\
17331733
size_t elem_size = VOPS_ELEM_SIZE(var);\
17341734
char* const_data = (char*)VARDATA(t);\
17351735
size_t const_size = VARSIZE(t) - VARHDRSZ;\
@@ -1775,7 +1775,7 @@ Datum vops_text_const(PG_FUNCTION_ARGS)
17751775
size_tconst_size=VARSIZE(t)-VARHDRSZ;
17761776
intwidth=PG_GETARG_INT32(1);
17771777
structvarlena*var=vops_alloc_text(width);
1778-
vops_tile_hdr*result=(vops_tile_hdr*)VARDATA(var);
1778+
vops_tile_hdr*result=VOPS_TEXT_TILE(var);
17791779
char*dst= (char*)(result+1);
17801780
inti;
17811781
for (i=0;i<TILE_SIZE;i++)
@@ -1801,14 +1801,14 @@ Datum vops_text_concat(PG_FUNCTION_ARGS)
18011801
{
18021802
structvarlena*vl=PG_GETARG_VARLENA_PP(0);
18031803
structvarlena*vr=PG_GETARG_VARLENA_PP(1);
1804-
vops_tile_hdr*left=(vops_tile_hdr*)VARDATA(vl);
1805-
vops_tile_hdr*right=(vops_tile_hdr*)VARDATA(vl);
1804+
vops_tile_hdr*left=VOPS_TEXT_TILE(vl);
1805+
vops_tile_hdr*right=VOPS_TEXT_TILE(vl);
18061806
size_tleft_elem_size=VOPS_ELEM_SIZE(vl);
18071807
size_tright_elem_size=VOPS_ELEM_SIZE(vr);
18081808
char*l= (char*)(left+1);
18091809
char*r= (char*)(right+1);
18101810
structvarlena*var=vops_alloc_text(left_elem_size+right_elem_size);
1811-
vops_tile_hdr*result=(vops_tile_hdr*)VARDATA(var);
1811+
vops_tile_hdr*result=VOPS_TEXT_TILE(var);
18121812
char*dst= (char*)(result+1);
18131813
inti;
18141814
for (i=0;i<TILE_SIZE;i++) {
@@ -1831,7 +1831,7 @@ Datum vops_betwixt_text(PG_FUNCTION_ARGS)
18311831
size_tfrom_size=VARSIZE(from)-VARHDRSZ;
18321832
char*till_data= (char*)VARDATA(till);
18331833
size_ttill_size=VARSIZE(till)-VARHDRSZ;
1834-
vops_tile_hdr*left=(vops_tile_hdr*)VARDATA(var);
1834+
vops_tile_hdr*left=VOPS_TEXT_TILE(var);
18351835
char*l= (char*)(left+1);
18361836
vops_bool*result= (vops_bool*)palloc(sizeof(vops_bool));
18371837
inti;
@@ -1859,13 +1859,13 @@ PG_FUNCTION_INFO_V1(vops_ifnull_text);
18591859
Datumvops_ifnull_text(PG_FUNCTION_ARGS)
18601860
{
18611861
structvarlena*var=PG_GETARG_VARLENA_PP(0);
1862-
vops_tile_hdr*opd=(vops_tile_hdr*)VARDATA(var);
1862+
vops_tile_hdr*opd=VOPS_TEXT_TILE(var);
18631863
size_telem_size=VOPS_ELEM_SIZE(var);
18641864
text*subst=PG_GETARG_TEXT_P(1);
18651865
char*subst_data= (char*)VARDATA(subst);
18661866
size_tsubst_size=VARSIZE(subst)-VARHDRSZ;
18671867
structvarlena*result=vops_alloc_text(elem_size);
1868-
vops_tile_hdr*res=(vops_tile_hdr*)VARDATA(result);
1868+
vops_tile_hdr*res=VOPS_TEXT_TILE(result);
18691869
char*dst= (char*)(res+1);
18701870
char*src= (char*)(opd+1);
18711871
inti;
@@ -1890,15 +1890,15 @@ PG_FUNCTION_INFO_V1(vops_coalesce_text);
18901890
Datumvops_coalesce_text(PG_FUNCTION_ARGS)
18911891
{
18921892
structvarlena*left=PG_GETARG_VARLENA_PP(0);
1893-
vops_tile_hdr*opd=(vops_tile_hdr*)VARDATA(left);
1893+
vops_tile_hdr*opd=VOPS_TEXT_TILE(left);
18941894
size_telem_size=VOPS_ELEM_SIZE(left);
18951895

18961896
structvarlena*right=PG_GETARG_VARLENA_PP(1);
1897-
vops_tile_hdr*subst=(vops_tile_hdr*)VARDATA(right);
1897+
vops_tile_hdr*subst=VOPS_TEXT_TILE(right);
18981898
size_tsubst_elem_size=VOPS_ELEM_SIZE(right);
18991899

19001900
structvarlena*result=vops_alloc_text(elem_size);
1901-
vops_tile_hdr*res=(vops_tile_hdr*)VARDATA(result);
1901+
vops_tile_hdr*res=VOPS_TEXT_TILE(result);
19021902
char*dst= (char*)(res+1);
19031903
char*src= (char*)(opd+1);
19041904
inti;
@@ -1921,7 +1921,7 @@ PG_FUNCTION_INFO_V1(vops_text_first);
19211921
Datumvops_text_first(PG_FUNCTION_ARGS)
19221922
{
19231923
structvarlena*var=PG_GETARG_VARLENA_PP(0);
1924-
vops_tile_hdr*tile=(vops_tile_hdr*)VARDATA(var);
1924+
vops_tile_hdr*tile=VOPS_TEXT_TILE(var);
19251925
size_telem_size=VOPS_ELEM_SIZE(var);
19261926

19271927
uint64mask= ~(tile->empty_mask |tile->null_mask);
@@ -1943,7 +1943,7 @@ PG_FUNCTION_INFO_V1(vops_text_last);
19431943
Datumvops_text_last(PG_FUNCTION_ARGS)
19441944
{
19451945
structvarlena*var=PG_GETARG_VARLENA_PP(0);
1946-
vops_tile_hdr*tile=(vops_tile_hdr*)VARDATA(var);
1946+
vops_tile_hdr*tile=VOPS_TEXT_TILE(var);
19471947
size_telem_size=VOPS_ELEM_SIZE(var);
19481948

19491949
uint64mask= ~(tile->empty_mask |tile->null_mask);
@@ -1965,7 +1965,7 @@ PG_FUNCTION_INFO_V1(vops_text_low);
19651965
Datumvops_text_low(PG_FUNCTION_ARGS)
19661966
{
19671967
structvarlena*var=PG_GETARG_VARLENA_PP(0);
1968-
vops_tile_hdr*tile=(vops_tile_hdr*)VARDATA(var);
1968+
vops_tile_hdr*tile=VOPS_TEXT_TILE(var);
19691969
size_telem_size=VOPS_ELEM_SIZE(var);
19701970

19711971
uint64mask= ~(tile->empty_mask |tile->null_mask);
@@ -1997,7 +1997,7 @@ PG_FUNCTION_INFO_V1(vops_text_high);
19971997
Datumvops_text_high(PG_FUNCTION_ARGS)
19981998
{
19991999
structvarlena*var=PG_GETARG_VARLENA_PP(0);
2000-
vops_tile_hdr*tile=(vops_tile_hdr*)VARDATA(var);
2000+
vops_tile_hdr*tile=VOPS_TEXT_TILE(var);
20012001
size_telem_size=VOPS_ELEM_SIZE(var);
20022002

20032003
uint64mask= ~(tile->empty_mask |tile->null_mask);
@@ -2049,7 +2049,7 @@ Datum vops_text_first_accumulate(PG_FUNCTION_ARGS)
20492049
state->ts=tss->payload[i];
20502050
state->ts_is_null= false;
20512051
if (vars!=NULL) {
2052-
vops_tile_hdr*tile=(vops_tile_hdr*)VARDATA(vars);
2052+
vops_tile_hdr*tile=VOPS_TEXT_TILE(vars);
20532053
if ((tile->empty_mask |tile->null_mask)& ((uint64)1 <<i)) {
20542054
state->val_is_null= true;
20552055
}else {
@@ -2102,7 +2102,7 @@ Datum vops_text_last_accumulate(PG_FUNCTION_ARGS)
21022102
state->ts=tss->payload[i];
21032103
state->ts_is_null= false;
21042104
if (vars!=NULL) {
2105-
vops_tile_hdr*tile=(vops_tile_hdr*)VARDATA(vars);
2105+
vops_tile_hdr*tile=VOPS_TEXT_TILE(vars);
21062106
if ((tile->empty_mask |tile->null_mask)& ((uint64)1 <<i)) {
21072107
state->val_is_null= true;
21082108
}else {

‎vops.h‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
#ifndef__VOPS_H__
22
#define__VOPS_H__
33

4-
#defineVOPS_SIZEOF_TEXT(width) (VARHDRSZ + sizeof(vops_tile_hdr) + (width)*TILE_SIZE)
5-
#defineVOPS_ELEM_SIZE(var) ((VARSIZE(var) - VARHDRSZ - sizeof(vops_tile_hdr)) / TILE_SIZE)
6-
#defineVOPS_GET_TILE(val,tid) ((vops_tile_hdr*)(((tid) == VOPS_TEXT) ? VARDATA(DatumGetTextP(val)) : DatumGetPointer(val)))
4+
#defineVOPS_SIZEOF_TEXT(width) (LONGALIGN(VARHDRSZ) + sizeof(vops_tile_hdr) + (width)*TILE_SIZE)
5+
#defineVOPS_ELEM_SIZE(var) ((VARSIZE(var) - LONGALIGN(VARHDRSZ) - sizeof(vops_tile_hdr)) / TILE_SIZE)
6+
#defineVOPS_TEXT_TILE(val) ((vops_tile_hdr*)((char*)DatumGetTextP(val) + LONGALIGN(VARHDRSZ)))
7+
#defineVOPS_GET_TILE(val,tid) (((tid) == VOPS_TEXT) ? VOPS_TEXT_TILE(val) : (vops_tile_hdr*)DatumGetPointer(val))
78

89
typedefenum
910
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp