codebude / QRCoder

A pure C# Open Source QR Code implementation
MIT License
4.59k stars 1.09k forks source link

QRCode class is missing under Linux since 1.4.3 #443

Closed WhiteFossa closed 5 months ago

WhiteFossa commented 1 year ago

Type of issue

Bug, showstopper-class

Expected Behavior

Code (see below) compiles

Current Behavior

You'll get an error about "class QRCode is not defined".

Possible Solution (optional)

Probably to change something near the `#if NET6_0_WINDOWS [System.Runtime.Versioning.SupportedOSPlatform("windows")]

endif`

Steps to Reproduce (for bugs)

Just use a simplest code from example:

QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode("The text which should be encoded.", QRCodeGenerator.ECCLevel.Q); QRCode qrCode = new QRCode(qrCodeData); Bitmap qrCodeImage = qrCode.GetGraphic(20);

and try to compile in under Linux and .NET 6.0

Your Environment

user-named-void commented 1 year ago

I have the same issue with windows and .NET 6 in 1.4.3. Downgrading to 1.4.2 solves the issue.

OptimusPi commented 1 year ago

I have the same issue on .NET 6 on version 1.4.3

Only upgraded to QRCoder 1.4.3 via a Snyk PR - apparently v1.4.2 has RCE exploit possible: https://security.snyk.io/vuln/SNYK-DOTNET-SYSTEMDRAWINGCOMMON-3063427

OptimusPi commented 1 year ago

p.s. There is an issue that talks about this, read here: https://github.com/codebude/QRCoder/issues/361#issuecomment-992152570

Jesn commented 1 year ago

@user-named-void So am I. According to what you said, demoting to 1.4.2 is indeed possible

codebude commented 5 months ago

Microsoft removed System.Drawing support in .NET 6 for non-Windows platforms. Since the QRCode renderer uses System.Drawing, it's correct that it isn't supported on Linux. But that must not be a problem as there are other rendering classes that are supported on non-Windows platforms. Check the compatibility matrix to find a renderer that fits your platform/environment: https://github.com/codebude/QRCoder/wiki/Advanced-usage---QR-Code-renderers#2-overview-of-the-different-renderers

Long-term we plan to move away from System.Drawing and replace it by another graphics library.