void test_compare_bytes_out_of_bounds() { ByteArray* a = new_bytearray("xyZzy"); ByteArray* b = new_bytearray("xyzzy"); Fixnum* zero = Fixnum::from(0); Fixnum* neg = Fixnum::from(-1); TS_ASSERT_THROWS_ASSERT(a->compare_bytes(state, b, neg, zero), const RubyException &e, TS_ASSERT(Exception::object_bounds_exceeded_error_p(state, e.exception))); TS_ASSERT_THROWS_ASSERT(a->compare_bytes(state, b, zero, neg), const RubyException &e, TS_ASSERT(Exception::object_bounds_exceeded_error_p(state, e.exception))); }
void test_set_byte() { ByteArray* b = new_bytearray("xyz"); b->set_byte(state, Fixnum::from(0), Fixnum::from('1')); TS_ASSERT_EQUALS(b->get_byte(state, Fixnum::from(0)), Fixnum::from('1')); b->set_byte(state, Fixnum::from(2), Fixnum::from('2')); TS_ASSERT_EQUALS(b->get_byte(state, Fixnum::from(2)), Fixnum::from('2')); }
bytearray_t* bytearray_from_lstring(const lstring_t* string) { bytearray_t* array; if (!(array = new_bytearray(string->length))) return NULL; memcpy(array->buffer, string->cstr, string->length); return array; }
bytearray_t* bytearray_from_buffer(const void* buffer, int size) { bytearray_t* array; if (!(array = new_bytearray(size))) return NULL; memcpy(array->buffer, buffer, size); return array; }
bytearray_t* slice_bytearray(bytearray_t* array, int start, int length) { bytearray_t* new_array; if (!(new_array = new_bytearray(length))) return NULL; memcpy(new_array->buffer, array->buffer + start, length); return new_array; }
void test_get_byte_index_out_of_bounds() { ByteArray* b = new_bytearray("xyz"); native_int sz = b->size(state)->to_native(); TS_ASSERT_THROWS_ASSERT(b->get_byte(state, Fixnum::from(sz)), const RubyException &e, TS_ASSERT(Exception::object_bounds_exceeded_error_p(state, e.exception))); TS_ASSERT_THROWS_ASSERT(b->get_byte(state, Fixnum::from(sz+1)), const RubyException &e, TS_ASSERT(Exception::object_bounds_exceeded_error_p(state, e.exception))); TS_ASSERT_THROWS_ASSERT(b->get_byte(state, Fixnum::from(-1)), const RubyException &e, TS_ASSERT(Exception::object_bounds_exceeded_error_p(state, e.exception))); }
void test_compare_bytes() { ByteArray* a = new_bytearray("xyZzyx"); ByteArray* b = new_bytearray("xyzzyx"); Fixnum* two = Fixnum::from(2); Fixnum* three = Fixnum::from(3); Fixnum* size = Fixnum::from(8); Fixnum* size1 = Fixnum::from(9); TS_ASSERT_EQUALS(a->size(state)->to_native(), 8); TS_ASSERT_EQUALS(b->size(state)->to_native(), 8); TS_ASSERT_EQUALS(a->compare_bytes(state, b, two, two), Fixnum::from(0)); TS_ASSERT_EQUALS(a->compare_bytes(state, b, two, three), Fixnum::from(-1)); TS_ASSERT_EQUALS(a->compare_bytes(state, b, three, two), Fixnum::from(1)); TS_ASSERT_EQUALS(a->compare_bytes(state, b, three, three), Fixnum::from(-1)); TS_ASSERT_EQUALS(a->compare_bytes(state, b, size, size), Fixnum::from(-1)); TS_ASSERT_EQUALS(a->compare_bytes(state, b, size1, size1), Fixnum::from(-1)); }
bytearray_t* concat_bytearrays(bytearray_t* array1, bytearray_t* array2) { bytearray_t* new_array; int new_size; new_size = array1->size + array2->size; if (!(new_array = new_bytearray(new_size))) return NULL; memcpy(new_array->buffer, array1->buffer, array1->size); memcpy(new_array->buffer + array1->size, array2->buffer, array2->size); return new_array; }
static duk_ret_t js_CreateByteArray(duk_context* ctx) { int size = duk_require_int(ctx, 0); bytearray_t* array; if (size < 0) duk_error_ni(ctx, -1, DUK_ERR_RANGE_ERROR, "CreateByteArray(): Size cannot be negative (%i)", size); if (!(array = new_bytearray(size))) duk_error_ni(ctx, -1, DUK_ERR_ERROR, "CreateByteArray(): Failed to create new byte array (internal error)"); duk_push_sphere_bytearray(ctx, array); return 1; }
void test_fetch_bytes_out_of_bounds() { ByteArray* b = new_bytearray("xyzzy"); Fixnum* neg = Fixnum::from(-1); Fixnum* zero = Fixnum::from(0); Fixnum* one = Fixnum::from(1); Fixnum* size = b->size(state); TS_ASSERT_THROWS_ASSERT(b->fetch_bytes(state, neg, zero), const RubyException &e, TS_ASSERT(Exception::object_bounds_exceeded_error_p(state, e.exception))); TS_ASSERT_THROWS_ASSERT(b->fetch_bytes(state, zero, neg), const RubyException &e, TS_ASSERT(Exception::object_bounds_exceeded_error_p(state, e.exception))); TS_ASSERT_THROWS_ASSERT(b->fetch_bytes(state, one, size), const RubyException &e, TS_ASSERT(Exception::object_bounds_exceeded_error_p(state, e.exception))); }
static gboolean rewrite_delta (OstreeRepo *src_repo, const char *src_commit, OstreeRepo *dst_repo, const char *dst_commit, GVariant *dst_commitv, const char *from, GError **error) { g_autoptr(GFile) src_delta_file = NULL; g_autoptr(GFile) dst_delta_file = NULL; g_autofree char *src_detached_key = _ostree_get_relative_static_delta_path (from, src_commit, "commitmeta"); g_autofree char *dst_detached_key = _ostree_get_relative_static_delta_path (from, dst_commit, "commitmeta"); g_autofree char *src_delta_dir = _ostree_get_relative_static_delta_path (from, src_commit, NULL); g_autofree char *dst_delta_dir = _ostree_get_relative_static_delta_path (from, dst_commit, NULL); g_autofree char *src_superblock_path = _ostree_get_relative_static_delta_path (from, src_commit, "superblock"); g_autofree char *dst_superblock_path = _ostree_get_relative_static_delta_path (from, dst_commit, "superblock"); GMappedFile *mfile = NULL; g_auto(GVariantBuilder) superblock_builder = FLATPAK_VARIANT_BUILDER_INITIALIZER; g_autoptr(GVariant) src_superblock = NULL; g_autoptr(GVariant) dst_superblock = NULL; g_autoptr(GBytes) bytes = NULL; g_autoptr(GVariant) dst_detached = NULL; g_autoptr(GVariant) src_metadata = NULL; g_autoptr(GVariant) src_recurse = NULL; g_autoptr(GVariant) src_parts = NULL; g_auto(GVariantDict) dst_metadata_dict = FLATPAK_VARIANT_DICT_INITIALIZER; int i; src_delta_file = g_file_resolve_relative_path (ostree_repo_get_path (src_repo), src_superblock_path); mfile = g_mapped_file_new (flatpak_file_get_path_cached (src_delta_file), FALSE, NULL); if (mfile == NULL) return TRUE; /* No superblock, not an error */ bytes = g_mapped_file_get_bytes (mfile); g_mapped_file_unref (mfile); src_superblock = g_variant_ref_sink (g_variant_new_from_bytes (G_VARIANT_TYPE (OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT), bytes, FALSE)); src_metadata = g_variant_get_child_value (src_superblock, 0); src_recurse = g_variant_get_child_value (src_superblock, 5); src_parts = g_variant_get_child_value (src_superblock, 6); if (g_variant_n_children (src_recurse) != 0) return flatpak_fail (error, "Recursive deltas not supported, ignoring"); g_variant_builder_init (&superblock_builder, G_VARIANT_TYPE (OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT)); g_variant_dict_init (&dst_metadata_dict, src_metadata); g_variant_dict_remove (&dst_metadata_dict, src_detached_key); if (ostree_repo_read_commit_detached_metadata (dst_repo, dst_commit, &dst_detached, NULL, NULL) && dst_detached != NULL) g_variant_dict_insert_value (&dst_metadata_dict, dst_detached_key, dst_detached); g_variant_builder_add_value (&superblock_builder, g_variant_dict_end (&dst_metadata_dict)); g_variant_builder_add_value (&superblock_builder, g_variant_get_child_value (src_superblock, 1)); /* timestamp */ g_variant_builder_add_value (&superblock_builder, from ? ostree_checksum_to_bytes_v (from) : new_bytearray ((guchar *) "", 0)); g_variant_builder_add_value (&superblock_builder, ostree_checksum_to_bytes_v (dst_commit)); g_variant_builder_add_value (&superblock_builder, dst_commitv); g_variant_builder_add_value (&superblock_builder, src_recurse); g_variant_builder_add_value (&superblock_builder, src_parts); g_variant_builder_add_value (&superblock_builder, g_variant_get_child_value (src_superblock, 7)); /* fallback */ dst_superblock = g_variant_ref_sink (g_variant_builder_end (&superblock_builder)); if (!glnx_shutil_mkdir_p_at (ostree_repo_get_dfd (dst_repo), dst_delta_dir, 0755, NULL, error)) return FALSE; for (i = 0; i < g_variant_n_children (src_parts); i++) { g_autofree char *src_part_path = g_strdup_printf ("%s/%d", src_delta_dir, i); g_autofree char *dst_part_path = g_strdup_printf ("%s/%d", dst_delta_dir, i); if (!glnx_file_copy_at (ostree_repo_get_dfd (src_repo), src_part_path, NULL, ostree_repo_get_dfd (dst_repo), dst_part_path, GLNX_FILE_COPY_OVERWRITE | GLNX_FILE_COPY_NOXATTRS, NULL, error)) return FALSE; } dst_delta_file = g_file_resolve_relative_path (ostree_repo_get_path (dst_repo), dst_superblock_path); if (!flatpak_variant_save (dst_delta_file, dst_superblock, NULL, error)) return FALSE; return TRUE; }
void test_move_bytes() { ByteArray* b = new_bytearray("xyzzy"); b->move_bytes(state, Fixnum::from(0), Fixnum::from(2), Fixnum::from(3)); TS_ASSERT_SAME_DATA(b->raw_bytes(), "xyzxy", 5); }
void test_fetch_bytes() { ByteArray* b = new_bytearray("xyzzy"); ByteArray* ba = b->fetch_bytes(state, Fixnum::from(1), Fixnum::from(3)); TS_ASSERT_SAME_DATA(ba->raw_bytes(), "yzz", 3); }