| /* |
| # Copyright 2021 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 <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include "h3api.h" |
| #include "utility.h" |
| |
| static const Direction DIGITS[7] = {CENTER_DIGIT, K_AXES_DIGIT, J_AXES_DIGIT, |
| JK_AXES_DIGIT, I_AXES_DIGIT, IK_AXES_DIGIT, |
| IJ_AXES_DIGIT}; |
| |
| int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
| if (size < sizeof(H3Index)) { |
| return 0; |
| } |
| H3Index h3; |
| memcpy(&h3, data, sizeof(H3Index)); |
| |
| H3Index input[] = {h3, h3}; |
| int inputSize = sizeof(input) / sizeof(H3Index); |
| |
| // fuzz compactCells |
| H3Index *compacted = calloc(inputSize, sizeof(H3Index)); |
| H3Error errCompact = compactCells(input, compacted, inputSize); |
| |
| // fuzz uncompactCells |
| int compactedCount = 0; |
| for (int i = 0; i < inputSize; i++) { |
| if (compacted[i] != 0) { |
| compactedCount++; |
| } |
| } |
| if (compactedCount < 2) { |
| int uncompactRes = 10; |
| int64_t uncompactedSize; |
| H3Error err2 = |
| uncompactCellsSize(compacted, inputSize, uncompactRes, &uncompactedSize); |
| |
| H3Index *uncompacted = calloc(uncompactedSize, sizeof(H3Index)); |
| H3Error err3 = uncompactCells(compacted, compactedCount, uncompacted, |
| uncompactedSize, uncompactRes); |
| free(uncompacted); |
| } |
| |
| // fuzz h3NeighborRotations |
| int rotations = 0; |
| for (int i = 0; i < 7; i++) { |
| h3NeighborRotations(h3, DIGITS[i], &rotations); |
| } |
| free(compacted); |
| return 0; |
| } |