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

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGanesh Ajjanagadde <gajjanagadde@gmail.com>2015-10-28 03:11:40 +0300
committerGanesh Ajjanagadde <gajjanagadde@gmail.com>2015-10-30 20:42:04 +0300
commit20a30077c3659e6dc0c5b9dfa08d39b70a6b5f4e (patch)
tree60278cfb15cdcf5e0556270f50cbfd3aba56dfbd /libavutil/mathematics.h
parente8e7eb150f152c9e4858ef0be3e76e4f98533cf6 (diff)
avutil/mathematics: correct documentation for av_gcd
av_gcd is now always defined regardless of input. This documents this change in the "documented API". Two benefits (closely related): 1. The function is robust, and there is no need to worry about INT64_MIN, etc. 2. Clients of av_gcd, like av_reduce, can now be made fully correct. Currently, av_reduce can trigger undefined behavior if e.g num is INT64_MIN due to integer overflow in the FFABS. Furthermore, this undefined behavior is completely undocumented, and could be a fuzzer's paradise. The FFABS was needed in the past as av_gcd was undefined for negative inputs. In order to make av_reduce robust, it is essential to guarantee that av_gcd works for all int64_t. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
Diffstat (limited to 'libavutil/mathematics.h')
-rw-r--r--libavutil/mathematics.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/libavutil/mathematics.h b/libavutil/mathematics.h
index ac94488729..57c44f845d 100644
--- a/libavutil/mathematics.h
+++ b/libavutil/mathematics.h
@@ -77,9 +77,10 @@ enum AVRounding {
};
/**
- * Return the greatest common divisor of a and b.
- * If both a and b are 0 or either or both are <0 then behavior is
- * undefined.
+ * Compute the greatest common divisor of a and b.
+ *
+ * @return gcd of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0;
+ * if a == 0 and b == 0, returns 0.
*/
int64_t av_const av_gcd(int64_t a, int64_t b);