Changeset: 7abfae9ee553 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7abfae9ee553
Modified Files:
        clients/mapilib/mapi.c
        sql/backends/monet5/sql_result.c
Branch: protocol
Log Message:

For some reason this fixes bus errors on Solaris (don't ask me, I don't know 
either).


diffs (49 lines):

diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -4120,8 +4120,10 @@ static char* mapi_convert_clob(struct Ma
 
 #define mapi_string_conversion_function(type, gdktpe, sqltpe,EXTRANULLCHECK)   
                                                                                
                                                \
 static char* mapi_convert_##sqltpe(struct MapiColumn *col) {                   
                                                                                
                                \
-       if (*((type*)col->buffer_ptr) == *((type*)col->null_value) 
EXTRANULLCHECK)      return NULL;                                               
                                                     \
-       if (conversion_##gdktpe##_to_string(col->write_buf, COLBUFSIZ, (type*) 
col->buffer_ptr, *((type*)col->null_value)) < 0) {   \
+       type buffer_value; \
+       memcpy(&buffer_value, col->buffer_ptr, sizeof(type)); \
+       if (buffer_value == *((type*)col->null_value) EXTRANULLCHECK)   return 
NULL;                                                                           
                         \
+       if (conversion_##gdktpe##_to_string(col->write_buf, COLBUFSIZ, 
&buffer_value, *((type*)col->null_value)) < 0) {   \
                return NULL;                                                    
                                                                                
                                                                                
\
        }                                                                       
                                                                                
                                                                                
                \
        return (char*) col->write_buf;                                          
                                                                                
                                                                \
@@ -5773,8 +5775,9 @@ mapi_fetch_row(MapiHdl hdl)
                        for (i = 0; i < (size_t) result->fieldcnt; i++) {
                                result->fields[i].buffer_ptr = buf;
                                if (result->fields[i].typelen < 0) {
-                                       // variable-length column
-                                       lng col_len = *((lng*) buf);
+                                       lng col_len;
+                                       // variable length column
+                                       memcpy(&col_len, buf, sizeof(lng));
                                        assert((size_t) col_len < 
hdl->mid->blocksize && col_len > 0);
                                        result->fields[i].buffer_ptr += 
sizeof(lng);
                                        buf += col_len + sizeof(lng);
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -2235,13 +2235,15 @@ int mvc_export_resultset_prot10(mvc *m, 
                                        // variable columns are prefixed by a 
length, 
                                        // but since we don't know the length 
yet, just skip over it for now
                                        char *startbuf = buf;
+                                       lng lenval;
                                        buf += sizeof(lng);
                                        for (crow = srow; crow < row; crow++) {
                                                char *str = (char*) 
BUNtail(iterators[i], crow);
                                                buf = mystpcpy(buf, str) + 1;
+                                               assert(buf - bs2_buffer(s).buf 
<= (lng) bsize);
                                        }
-                                       // after the loop we know the size of 
the column, so write it
-                                       *((lng*)startbuf) = mnstr_swap_lng(s, 
buf - (startbuf + sizeof(lng)));
+                                       lenval = mnstr_swap_lng(s, (lng) (buf - 
(startbuf + sizeof(lng))));
+                                       memcpy(startbuf, &lenval, sizeof(lng));
                                }
                        } else {
                                int atom_size = ATOMsize(mtype);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to