[Groonga-commit] groonga/groonga at d573e6f [master] grn_ja_reader: use LZ4_decompress_safe() because it is fast enough

Back to archive index

Susumu Yata null+****@clear*****
Mon Dec 7 13:19:37 JST 2015


Susumu Yata	2015-12-07 13:19:37 +0900 (Mon, 07 Dec 2015)

  New Revision: d573e6f1af841da2566478c4295e3e8b754a9720
  https://github.com/groonga/groonga/commit/d573e6f1af841da2566478c4295e3e8b754a9720

  Message:
    grn_ja_reader: use LZ4_decompress_safe() because it is fast enough
    
    GitHub: #441

  Modified files:
    lib/store.c

  Modified: lib/store.c (+12 -11)
===================================================================
--- lib/store.c    2015-12-07 12:29:09 +0900 (b99fe46)
+++ lib/store.c    2015-12-07 13:19:37 +0900 (7e8a0d3)
@@ -1791,10 +1791,14 @@ grn_ja_reader_read_zlib(grn_ctx *ctx, grn_ja_reader *reader, void *buf)
 #endif /* GRN_WITH_ZLIB */
 
 #ifdef GRN_WITH_LZ4
+/*
+ * grn_ja_reader_read_lz4() reads a value from a LZ4 compressed jagged array.
+ * NOTE: 
+ */
 static grn_rc
 grn_ja_reader_read_lz4(grn_ctx *ctx, grn_ja_reader *reader, void *buf)
 {
-  int src_size;
+  int src_size, dest_size;
   grn_ja_einfo *einfo = (grn_ja_einfo *)reader->einfo;
   if (EHUGE_P(einfo)) {
     grn_io *io = reader->ja->io;
@@ -1833,20 +1837,17 @@ grn_ja_reader_read_lz4(grn_ctx *ctx, grn_ja_reader *reader, void *buf)
     grn_memcpy(packed_ptr, seg_addr, size);
     GRN_IO_SEG_UNREF(io, seg_id);
     seg_id++;
-    /*
-     * TODO: Compare LZ4_decompress_fast() and LZ4_decompress_safe().
-     *       If the difference is small, LZ4_decompress_safe() should be used
-     *       for safety.
-     */
-    src_size = LZ4_decompress_fast(reader->packed_buf, (char *)buf,
-                                   (int)reader->value_size);
+    src_size = (int)(reader->packed_size - sizeof(uint64_t));
+    dest_size = LZ4_decompress_safe(reader->packed_buf, buf, src_size,
+                                    (int)reader->value_size);
   } else {
     char *packed_addr = (char *)reader->body_seg_addr;
     packed_addr += reader->body_seg_offset + sizeof(uint64_t);
-    src_size = LZ4_decompress_fast(packed_addr, (char *)buf,
-                                   (int)reader->value_size);
+    src_size = (int)(reader->packed_size - sizeof(uint64_t));
+    dest_size = LZ4_decompress_safe(packed_addr, buf, src_size,
+                                    (int)reader->value_size);
   }
-  if (src_size != (reader->packed_size - sizeof(uint64_t))) {
+  if ((uint32_t)dest_size != reader->value_size) {
     return GRN_UNKNOWN_ERROR;
   }
   return GRN_SUCCESS;
-------------- next part --------------
HTML����������������������������...
다운로드 



More information about the Groonga-commit mailing list
Back to archive index