AUR AI Reviewer

Review Results

Version #2104 of makemkv · commit 5b766cfade6b · status Reviewed

Risk 0/5 · Safe .SRCINFO
Result #1979

Comment

The only change in this .SRCINFO hunk is a pkgrel bump from 1 to 2. No sources, build commands, dependencies, install scripts, or package contents are altered here, so there is no new security-relevant behavior introduced by this diff. This appears to be a metadata-only rebuild/release bump.

@@ -1,7 +1,7 @@
 pkgbase = makemkv
 	pkgdesc = DVD and Blu-ray to MKV converter
 	pkgver = 1.18.4
-	pkgrel = 1
+	pkgrel = 2
 	url = https://www.makemkv.com
 	install = makemkv.install
 	arch = x86_64
Risk 0/5 · Safe .SRCINFO
Result #1980

Comment

The change only adds a new local patch file to the package sources and updates .SRCINFO accordingly. The patch is part of the normal build process, is fetched from the local package tree rather than an external URL, and the diff shown does not introduce any network access, privilege escalation, install-script changes, or suspicious packaging behavior. While the patch itself should be reviewed for correctness, nothing in this .SRCINFO-only change indicates a security issue.

@@ -15,10 +15,12 @@ pkgbase = makemkv
 	optdepends = java-runtime: bdjava https://www.makemkv.com/bdjava/
 	source = https://www.makemkv.com/download/makemkv-bin-1.18.4.tar.gz
 	source = https://www.makemkv.com/download/makemkv-oss-1.18.4.tar.gz
+	source = ffmpeg9.patch
 	source = makemkv.1
 	source = makemkvcon.1
 	sha256sums = cee56de0baa5531abed16bd862742d308d772b4ab4dae16ee865bf74f04a1608
 	sha256sums = 8590063648d42ec2a958b74573d7022f0f4c334e4e4fe7dd53b70c6e748ba453
+	sha256sums = d35ae9e841ac43297e17a08d8819b339c5058bbdfc150fab508a442365756929
 	sha256sums = 5573b2e4bade10d8cd258a7c235eb46f66ef8c8c97e5d5eb090c38fa0f94389b
 	sha256sums = f12c0facf2f0071a9f728b138986f0a4c2b4ff6ace2dfb2e96364e215e9fda6f
 
Risk 0/5 · Safe PKGBUILD
Result #1981

Comment

This change only bumps pkgrel from 1 to 2 in PKGBUILD and does not alter sources, build steps, dependencies, install scripts, or packaging behavior. No security-relevant functionality is introduced by the diff shown.

@@ -5,7 +5,7 @@
 
 pkgname=makemkv
 pkgver=1.18.4
-pkgrel=1
+pkgrel=2
 pkgdesc="DVD and Blu-ray to MKV converter"
 arch=(x86_64 i686 aarch64)
 url="https://www.makemkv.com"
Risk 1/5 · Low PKGBUILD
Result #1982

Comment

The change adds a local patch source and applies it in prepare(), but the patch itself is a straightforward compatibility update for FFmpeg 9 APIs in libffabi. The new source is fetched over HTTPS from the upstream MakeMKV download site, and the patch is checksum-pinned in PKGBUILD. I did not find any signs of network access during build, privilege escalation, suspicious install-script behavior, or installation outside $pkgdir in the reviewed hunk. Risk is low, though the patch should still be treated as code execution during build as usual for PKGBUILD patches.

@@ -15,14 +15,21 @@ optdepends=('java-runtime: bdjava https://www.makemkv.com/bdjava/')
 install=makemkv.install
 source=(${url}/download/${pkgname}-bin-${pkgver}.tar.gz
         ${url}/download/${pkgname}-oss-${pkgver}.tar.gz
+        ffmpeg9.patch
         makemkv.1
         makemkvcon.1
         )
 sha256sums=('cee56de0baa5531abed16bd862742d308d772b4ab4dae16ee865bf74f04a1608'
             '8590063648d42ec2a958b74573d7022f0f4c334e4e4fe7dd53b70c6e748ba453'
+            'd35ae9e841ac43297e17a08d8819b339c5058bbdfc150fab508a442365756929'
             '5573b2e4bade10d8cd258a7c235eb46f66ef8c8c97e5d5eb090c38fa0f94389b'
             'f12c0facf2f0071a9f728b138986f0a4c2b4ff6ace2dfb2e96364e215e9fda6f')
 
+prepare() {
+  cd "${pkgname}-oss-${pkgver}"
+  patch -Np1 < ../ffmpeg9.patch
+}
+
 build() {
   cd "${srcdir}/${pkgname}-oss-${pkgver}"
   ./configure --prefix=/usr
Risk 0/5 · Safe ffmpeg9.patch
Result #1983

Comment

The patch is a compatibility refactor for FFmpeg codec capability queries, replacing direct access to codec->ch_layouts / supported_samplerates / sample_fmts with avcodec_get_supported_config() and adjusting some types/formatting. I do not see any added network access, privilege escalation, persistence, or packaging-time execution. The new code only reads codec metadata and populates in-memory structures; the main risk is potential build/runtime compatibility issues with FFmpeg API changes, not a security issue. No malicious behavior is evident in this diff.

@@ -0,0 +1,187 @@
+--- a/libffabi/src/ffabi.c	2026-08-14 21:05:19.511652228 -0600
++++ b/libffabi/src/ffabi.c	2026-08-14 21:04:32.531358307 -0600
+@@ -531,90 +531,149 @@
+ {
+     char* exinfo;
+     size_t len;
+-    unsigned int count_ch_layouts_in = 0;
++    int count_ch_layouts_in = 0;
+     unsigned int count_ch_layouts_out = 0;
+-    uint64_t*   channel_layouts;
++    uint64_t* channel_layouts;
++    const AVChannelLayout* ch_layouts = NULL;
+     unsigned int i;
++    int ret;
+ 
+     len = strlen(codec->name);
+     if (len >= FFM_CODEC_INFO_NAME_MAX_LENGTH) return -1;
+ 
+-    if (NULL != codec->ch_layouts) {
+-        while (0 != codec->ch_layouts[count_ch_layouts_in].nb_channels)
+-        {
+-            count_ch_layouts_in++;
+-        }
+-    }
++    ret = avcodec_get_supported_config(
++        NULL, codec, AV_CODEC_CONFIG_CHANNEL_LAYOUT, 0,
++        (const void**)&ch_layouts, &count_ch_layouts_in
++    );
++
++    if (ret < 0) return -1;
++
++    exinfo = (char*)ffabi_memalign(
++        sizeof(uint64_t),
++        FFM_CODEC_INFO_NAME_MAX_LENGTH +
++        FFM_CODEC_INFO_EXMARK_LENGTH +
++        ((count_ch_layouts_in + 1) * sizeof(uint64_t))
++    );
+ 
+-    exinfo = (char*)ffabi_memalign(sizeof(uint64_t), (FFM_CODEC_INFO_NAME_MAX_LENGTH + FFM_CODEC_INFO_EXMARK_LENGTH + ((count_ch_layouts_in+1)*sizeof(uint64_t))));
+     if (NULL == exinfo) return -1;
+ 
+     memcpy(exinfo, codec->name, len + 1);
+-    memcpy(exinfo + FFM_CODEC_INFO_NAME_MAX_LENGTH, FFM_CODEC_INFO_EXMARK_MAGIC, FFM_CODEC_INFO_EXMARK_LENGTH);
+-    channel_layouts = (uint64_t*)(exinfo + FFM_CODEC_INFO_NAME_MAX_LENGTH + FFM_CODEC_INFO_EXMARK_LENGTH);
++    memcpy(exinfo + FFM_CODEC_INFO_NAME_MAX_LENGTH,
++           FFM_CODEC_INFO_EXMARK_MAGIC,
++           FFM_CODEC_INFO_EXMARK_LENGTH);
++
++    channel_layouts = (uint64_t*)(
++        exinfo +
++        FFM_CODEC_INFO_NAME_MAX_LENGTH +
++        FFM_CODEC_INFO_EXMARK_LENGTH
++    );
+ 
+     info->name = exinfo;
+     info->channel_layouts = channel_layouts;
+ 
+-    for (i = 0; i < count_ch_layouts_in; i++)
+-    {
+-        if (AV_CHANNEL_ORDER_NATIVE != codec->ch_layouts[i].order) continue;
+-        channel_layouts[count_ch_layouts_out++] = codec->ch_layouts[i].u.mask;
++    for (i = 0; i < (unsigned int)count_ch_layouts_in; i++) {
++        if (AV_CHANNEL_ORDER_NATIVE != ch_layouts[i].order)
++            continue;
++
++        channel_layouts[count_ch_layouts_out++] =
++            ch_layouts[i].u.mask;
+     }
++
+     channel_layouts[count_ch_layouts_out] = 0;
+ 
+     return 0;
+ }
+ #endif
+ 
+-int __cdecl ffm_audio_get_codec_information(FFM_CodecInfo* info, const char* name, int encode)
++int __cdecl ffm_audio_get_codec_information(
++    FFM_CodecInfo* info,
++    const char* name,
++    int encode)
+ {
+     AVCodec* codec;
++    const int* sample_rates = NULL;
++    const enum AVSampleFormat* sample_fmts = NULL;
++#ifndef FFABI_HAVE_OLD_CHANNEL_LAYOUT
++    const AVChannelLayout* ch_layouts = NULL;
++#endif
++    int num_sample_rates = 0;
++    int num_sample_fmts = 0;
++#ifndef FFABI_HAVE_OLD_CHANNEL_LAYOUT
++    int num_ch_layouts = 0;
++#endif
++    int ret;
+     int i;
+ 
+     memset(info, 0, sizeof(*info));
+ 
+     if (encode) {
+-        codec = (AVCodec*) avcodec_find_encoder_by_name(name);
++        codec = (AVCodec*)avcodec_find_encoder_by_name(name);
+     } else {
+-        codec = (AVCodec*) avcodec_find_decoder_by_name(name);
++        codec = (AVCodec*)avcodec_find_decoder_by_name(name);
+     }
+ 
+-    if (!codec) {
++    if (!codec)
+         return ffmerr(1, encode);
+-    }
+ 
+     info->name = codec->name;
+     info->long_name = codec->long_name;
+-    info->sample_rates = codec->supported_samplerates;
++
++    ret = avcodec_get_supported_config(
++        NULL, codec, AV_CODEC_CONFIG_SAMPLE_RATE, 0,
++        (const void**)&sample_rates, &num_sample_rates
++    );
++
++    if (ret < 0)
++        return ffmerr(2, 0);
++
++    info->sample_rates = sample_rates;
++
+ #ifdef FFABI_HAVE_OLD_CHANNEL_LAYOUT
+     info->channel_layouts = codec->channel_layouts;
+ #else
+-    if (NULL == codec->ch_layouts) {
++    ret = avcodec_get_supported_config(
++        NULL, codec, AV_CODEC_CONFIG_CHANNEL_LAYOUT, 0,
++        (const void**)&ch_layouts, &num_ch_layouts
++    );
++
++    if (ret < 0)
++        return ffmerr(2, 0);
++
++    if (NULL == ch_layouts) {
+         info->channel_layouts = NULL;
+     } else {
+-        if (set_codec_info_extended(info, codec)) {
++        if (set_codec_info_extended(info, codec))
+             return ffmerr(2, 0);
+-        }
+     }
+ #endif
++
+     info->id = codec->id;
+     info->capabilities = codec->capabilities;
++
+     if (codec->profiles) {
+-        for (i=0;i<32;i++) {
+-            if (codec->profiles[i].profile==AV_PROFILE_UNKNOWN)
++        for (i = 0; i < 32; i++) {
++            if (codec->profiles[i].profile == AV_PROFILE_UNKNOWN)
+                 break;
+-            info->profiles_names[i]=codec->profiles[i].name;
+-            info->profiles_values[i]=codec->profiles[i].profile;
+-            info->profiles_count = i+1;
++
++            info->profiles_names[i] = codec->profiles[i].name;
++            info->profiles_values[i] = codec->profiles[i].profile;
++            info->profiles_count = i + 1;
+         }
+     }
+-    if (codec->sample_fmts) {
+-        for (i=0;i<16;i++) {
+-            if (codec->sample_fmts[i]==AV_SAMPLE_FMT_NONE)
+-                break;
+-            info->sample_formats[i]=(uint8_t)back_translate_sample_fmt(codec->sample_fmts[i]);
+-            info->sample_formats_count = i+1;
++
++    ret = avcodec_get_supported_config(
++        NULL, codec, AV_CODEC_CONFIG_SAMPLE_FORMAT, 0,
++        (const void**)&sample_fmts, &num_sample_fmts
++    );
++
++    if (ret < 0)
++        return ffmerr(2, 0);
++
++    if (sample_fmts) {
++        for (i = 0; i < num_sample_fmts && i < 16; i++) {
++            info->sample_formats[i] =
++                (uint8_t)back_translate_sample_fmt(sample_fmts[i]);
++            info->sample_formats_count = i + 1;
+         }
+     }
+