Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1219,14 +1219,18 @@ function Format-Markdown-Output {
$title = $rawTitle.Replace('|', '\|')
$link = "[#$($pr.Number)]($($pr.URL))"
$turnCol = "$($pr.TurnIcon) $($pr.TurnDetail)"
# Wrap author handles in backticks so GitHub renders them as inline code
# rather than as @mentions — this issue is for MAUI team triage tracking,
# not a notification firehose to every PR author each day.
$author = "``@$($pr.Author)``"
if ($showMilestone -and $showTurn) {
[void]$md.AppendLine("| $link | $title | @$($pr.Author) | $($pr.Milestone) | $turnCol | $($pr.Platform) | $($pr.Age)d |")
[void]$md.AppendLine("| $link | $title | $author | $($pr.Milestone) | $turnCol | $($pr.Platform) | $($pr.Age)d |")
} elseif ($showMilestone) {
[void]$md.AppendLine("| $link | $title | @$($pr.Author) | $($pr.Milestone) | $($pr.Platform) | $($pr.Age)d | $($pr.Updated)d ago |")
[void]$md.AppendLine("| $link | $title | $author | $($pr.Milestone) | $($pr.Platform) | $($pr.Age)d | $($pr.Updated)d ago |")
} elseif ($showTurn) {
[void]$md.AppendLine("| $link | $title | @$($pr.Author) | $turnCol | $($pr.Platform) | $($pr.Age)d |")
[void]$md.AppendLine("| $link | $title | $author | $turnCol | $($pr.Platform) | $($pr.Age)d |")
} else {
[void]$md.AppendLine("| $link | $title | @$($pr.Author) | $($pr.Platform) | $($pr.Age)d | $($pr.Updated)d ago |")
[void]$md.AppendLine("| $link | $title | $author | $($pr.Platform) | $($pr.Age)d | $($pr.Updated)d ago |")
}
}
[void]$md.AppendLine("")
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/pr-review-queue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ concurrency:
jobs:
generate-report:
runs-on: ubuntu-latest
if: github.event_name != 'pull_request'
# Guard: only run in dotnet/maui — prevents the scheduled run from firing
# in forks and pinging fork owners with duplicate queue issues.
if: github.repository_owner == 'dotnet' && github.event_name != 'pull_request'
permissions:
contents: read
issues: write
Expand Down Expand Up @@ -86,7 +88,7 @@ jobs:
# Dry-run on PRs: validate the script works without creating issues
validate:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
if: github.repository_owner == 'dotnet' && github.event_name == 'pull_request'
permissions:
contents: read
pull-requests: read
Expand Down
10 changes: 8 additions & 2 deletions eng/pipelines/ci-copilot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,10 @@ stages:
skipAndroidPlatformApis: true
onlyAndroidPlatformDefaultApis: true
skipAndroidEmulatorImages: ${{ ne(parameters.Platform, 'android') }}
skipAndroidCreateAvds: ${{ ne(parameters.Platform, 'android') }}
# AVD is created by the inline 'Create AVD and boot Android Emulator' script below
# with specific config (playstore image variant, partition shrink, ADB key pre-auth)
# that ProvisionAndroidSdkAvdCreateAvds doesn't replicate.
skipAndroidCreateAvds: true
androidEmulatorApiLevel: '30'
skipSimulatorSetup: ${{ or(eq(parameters.Platform, 'android'), eq(parameters.Platform, 'windows'), eq(parameters.Platform, 'catalyst')) }}
skipCertificates: true
Expand Down Expand Up @@ -871,7 +874,10 @@ stages:
skipAndroidPlatformApis: true
onlyAndroidPlatformDefaultApis: true
skipAndroidEmulatorImages: ${{ ne(parameters.Platform, 'android') }}
skipAndroidCreateAvds: ${{ ne(parameters.Platform, 'android') }}
# AVD is created by the inline 'Create AVD and boot Android Emulator' script below
# with specific config (playstore image variant, partition shrink, ADB key pre-auth)
# that ProvisionAndroidSdkAvdCreateAvds doesn't replicate.
skipAndroidCreateAvds: true
androidEmulatorApiLevel: '30'
skipSimulatorSetup: ${{ or(eq(parameters.Platform, 'android'), eq(parameters.Platform, 'windows'), eq(parameters.Platform, 'catalyst')) }}
skipCertificates: true
Expand Down
9 changes: 9 additions & 0 deletions eng/pipelines/common/variables.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@ variables:
value: 26.0.1
- name: POWERSHELL_VERSION
value: 7.4.0
# Workaround for PowerShell/PowerShell#20802 (open since Nov 2023):
# pwsh 7.4.x intermittently aborts at startup on macOS with
# 'Call to procargs failed with errno 5'
# because AttemptExecPwshLogin() races on sysctl(KERN_PROCARGS2).
# Setting __PWSH_LOGIN_CHECKED makes pwsh short-circuit the login-shell
# detection that triggers the racy syscall (see Program.cs in PowerShell repo).
# Hit on internal dnceng dotnet-maui build 2990586 (release/11.0.1xx-preview5).
- name: __PWSH_LOGIN_CHECKED
value: '1'
# Localization variables
- name: LocBranchPrefix
value: 'loc-hb'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ private Shader getShader(int width, int height) {
return null;
}

if (width == 0 && height == 0) {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[major] Android graphics/platform API preconditions — This guard only handles the reported zero-width-and-height case, but Android RadialGradient throws whenever the computed radius is <= 0. A RadialGradientPaint can still produce radius 0 with non-zero bounds, for example when Radius is 0 or left at the default from constructors that don't initialize it, so this path will still reach new RadialGradient(..., this.gradientBounds[2] * Math.max(width, height), ...) and crash. Please guard the radial branch on the computed radius before constructing RadialGradient and add coverage for a zero-radius radial gradient.

return null;
}

if (width != this.shaderWidth || height != this.shaderHeight) {
this.shaderWidth = width;
this.shaderHeight = height;
Expand Down
23 changes: 23 additions & 0 deletions src/Core/tests/DeviceTests/Graphics/GraphicsTests.Android.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,34 @@
using Microsoft.Maui.DeviceTests.Stubs;
using Microsoft.Maui.Graphics;
using Xunit;

namespace Microsoft.Maui.DeviceTests;

[Category(TestCategory.Graphics)]
public partial class GraphicsTests : TestBase
{
[Fact]
public void RadialGradientWithZeroSizeDoesNotThrow()
{
var paint = new RadialGradientPaintStub(Colors.Red, Colors.Blue)
{
Center = new Point(0.5, 0.5),
Radius = 0.5
};

var context = global::Android.App.Application.Context;
using var drawable = new Microsoft.Maui.Graphics.MauiDrawable(context);

drawable.SetBounds(0, 0, 0, 0);
drawable.SetBackground(paint);

using var bitmap = global::Android.Graphics.Bitmap.CreateBitmap(1, 1, global::Android.Graphics.Bitmap.Config.Argb8888!);
using var canvas = new global::Android.Graphics.Canvas(bitmap);

var ex = Record.Exception(() => drawable.Draw(canvas));
Assert.Null(ex);
}

[Theory]
[InlineData(0, 0, 0, 0)]
[InlineData(10, 10, 100, 100)]
Expand Down
Loading