Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mm2/Little-CMS.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarti Maria <marti.maria@littlecms.com>2022-10-15 20:45:39 +0300
committerMarti Maria <marti.maria@littlecms.com>2022-10-15 20:45:39 +0300
commit38f6e40c8855708b9a0063dcc59b490cb1f00640 (patch)
treef7dda09e1d2ebc45c091b437d555b0db3018ffea
parent7c5a51f8472be479bf5674ef6bfabd70b8c88253 (diff)
changed changelog
recursively
-rw-r--r--ChangeLog9
-rw-r--r--testbed/fuzzer.c73
2 files changed, 82 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 4c1cd52..3d58553 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+-----------------------
+2.14 Featured release
+-----------------------
+lcms2 now implements ICC specification 4.4
+New multi-threaded plug-in
+several fixes to keep fuzzers happy
+Remove check on DLL when CMS_NO_REGISTER_KEYWORD is used
+Added more validation against broken profiles
+Add more help to several tools
-----------------------
2.13.1 Hot fix
diff --git a/testbed/fuzzer.c b/testbed/fuzzer.c
new file mode 100644
index 0000000..3d484de
--- /dev/null
+++ b/testbed/fuzzer.c
@@ -0,0 +1,73 @@
+/* Copyright 2022 Google LLC
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+#include <stdint.h>
+#include "lcms2.h"
+#include <malloc.h>
+
+void
+run_test(const uint8_t* data,
+ size_t size,
+ uint32_t intent_id,
+ uint32_t input_format,
+ uint32_t output_format,
+ uint32_t flags) {
+ if (size < 2) {
+ return;
+ }
+
+ size_t mid = size / 2;
+
+ cmsHPROFILE hInProfile, hOutProfile;
+ cmsHTRANSFORM hTransform;
+
+ hInProfile = cmsOpenProfileFromMem(data, mid);
+ hOutProfile = cmsOpenProfileFromMem(data + mid, size - mid);
+ hTransform = cmsCreateTransform(hInProfile, input_format, hOutProfile,
+ output_format, intent_id, flags);
+ cmsCloseProfile(hInProfile);
+ cmsCloseProfile(hOutProfile);
+
+ if (hTransform) {
+ cmsDeleteTransform(hTransform);
+ }
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ if (size < 16) {
+ return 0;
+ }
+
+ // Generate a random set of args for cmsCreateTransform
+ uint32_t input_format = *((const uint32_t*)data);
+ uint32_t output_format = *((const uint32_t*)data + 1);
+ uint32_t flags = *((const uint32_t*)data + 2);
+ uint32_t intent = *((const uint32_t*)data + 3) % 16;
+ data += 16;
+ size -= 16;
+
+ run_test(data, size, intent, input_format, output_format, flags);
+ return 0;
+}
+
+int main(int argc, char** argv)
+{
+ FILE* fd = fopen(argv[1], "rb");
+ if (!fd) return 1;
+ fseek(fd, 0, SEEK_END);
+ long fsize = ftell(fd);
+ fseek(fd, 0, SEEK_SET);
+ char* buffer = (char*)malloc(fsize);
+ fread(buffer, 1, fsize, fd);
+ fclose(fd);
+ return LLVMFuzzerTestOneInput((const uint8_t*)buffer, fsize);
+}