Browse Source

Refactoring extensions

Former-commit-id: 58557a02831d8c6a455bdd59d28f8965810d7f03
pull/17/head
James South 12 years ago
parent
commit
448d2de606
  1. 110
      src/ImageProcessor.UnitTests/Extensions/StringExtensionsUnitTests.cs
  2. 98
      src/ImageProcessor.Web.UnitTests/Extensions/StringExtensionsUnitTests.cs
  3. 1
      src/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj
  4. 5
      src/ImageProcessor.Web/NET45/Configuration/ImageCacheSection.cs
  5. 143
      src/ImageProcessor.Web/NET45/Extensions/StringExtensions.cs
  6. 2
      src/ImageProcessor.Web/NET45/HttpModules/ImageProcessingModule.cs
  7. 1
      src/ImageProcessor.Web/NET45/ImageProcessor.Web_NET45.csproj
  8. 13
      src/ImageProcessor/Common/Extensions/AssemblyExtensions.cs
  9. 105
      src/ImageProcessor/Common/Extensions/StringExtensions.cs
  10. 22
      src/ImageProcessor/Imaging/Formats/GifEncoder.cs
  11. 2
      src/ImageProcessor/Imaging/Formats/JpegFormat.cs
  12. 6
      src/ImageProcessor/Imaging/Formats/NativeMethods.cs
  13. 1
      src/ImageProcessor/Settings.StyleCop

110
src/ImageProcessor.UnitTests/Extensions/StringExtensionsUnitTests.cs

@ -10,7 +10,6 @@
namespace ImageProcessor.UnitTests.Extensions
{
using System;
using System.Collections.Generic;
using ImageProcessor.Common.Extensions;
using NUnit.Framework;
@ -21,74 +20,6 @@ namespace ImageProcessor.UnitTests.Extensions
[TestFixture]
public class StringExtensionsUnitTests
{
/// <summary>
/// Tests the MD5 fingerprint
/// </summary>
/// <param name="input">The input value</param>
/// <param name="expected">The expected output of the hash</param>
[Test]
[TestCase("test input", "2e7f7a62eabf0993239ca17c78c464d9")]
[TestCase("lorem ipsum dolor", "96ee002fee25e8b675a477c9750fa360")]
[TestCase("LoReM IpSuM DoLoR", "41e201da794c7fbdb8ce5526a71c8c83")]
[TestCase("1234567890", "e15e31c3d8898c92ab172a4311be9e84")]
public void TestToMd5Fingerprint(string input, string expected)
{
string result = input.ToMD5Fingerprint();
bool comparison = result.Equals(expected, StringComparison.InvariantCultureIgnoreCase);
Assert.True(comparison);
}
/// <summary>
/// Tests the SHA-1 fingerprint
/// </summary>
/// <param name="input">The input value</param>
/// <param name="expected">The expected output of the hash</param>
[Test]
[TestCase("test input", "49883b34e5a0f48224dd6230f471e9dc1bdbeaf5")]
[TestCase("lorem ipsum dolor", "75899ad8827a32493928903aecd6e931bf36f967")]
[TestCase("LoReM IpSuM DoLoR", "2f44519afae72fc0837b72c6b53cb11338a1f916")]
[TestCase("1234567890", "01b307acba4f54f55aafc33bb06bbbf6ca803e9a")]
public void TestToSHA1Fingerprint(string input, string expected)
{
string result = input.ToSHA1Fingerprint();
bool comparison = result.Equals(expected, StringComparison.InvariantCultureIgnoreCase);
Assert.True(comparison);
}
/// <summary>
/// Tests the SHA-256 fingerprint
/// </summary>
/// <param name="input">The input value</param>
/// <param name="expected">The expected output of the hash</param>
[Test]
[TestCase("test input", "9dfe6f15d1ab73af898739394fd22fd72a03db01834582f24bb2e1c66c7aaeae")]
[TestCase("lorem ipsum dolor", "ed03353266c993ea9afb9900a3ca688ddec1656941b1ca15ee1650a022616dfa")]
[TestCase("LoReM IpSuM DoLoR", "55f6cb90ba5cd8eeb6f5f16f083ebcd48ea06c34cc5aed8e33246fc3153d3898")]
[TestCase("1234567890", "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646")]
public void TestToSHA256Fingerprint(string input, string expected)
{
string result = input.ToSHA256Fingerprint();
bool comparison = result.Equals(expected, StringComparison.InvariantCultureIgnoreCase);
Assert.True(comparison);
}
/// <summary>
/// Tests the SHA-512 fingerprint
/// </summary>
/// <param name="input">The input value</param>
/// <param name="expected">The expected output of the hash</param>
[Test]
[TestCase("test input", "40aa1b203c9d8ee150b21c3c7cda8261492e5420c5f2b9f7380700e094c303b48e62f319c1da0e32eb40d113c5f1749cc61aeb499167890ab82f2cc9bb706971")]
[TestCase("lorem ipsum dolor", "cd813e13d1d3919cdccc31c19d8f8b70bd25e9819f8770a011c8c7a6228536e6c9427b338cd732f2da3c0444dfebef838b745cdaf3fd5dcba8db24fc83a3f6ef")]
[TestCase("LoReM IpSuM DoLoR", "3e4704d31f838456c0a5f0892afd392fbc79649a029d017b8104ebd00e2816d94ab4629f731765bf655088b130c51f6f47ca2f8b047749dbd992cf45e89ff431")]
[TestCase("1234567890", "12b03226a6d8be9c6e8cd5e55dc6c7920caaa39df14aab92d5e3ea9340d1c8a4d3d0b8e4314f1f6ef131ba4bf1ceb9186ab87c801af0d5c95b1befb8cedae2b9")]
public void TestToSHA512Fingerprint(string input, string expected)
{
string result = input.ToSHA512Fingerprint();
bool comparison = result.Equals(expected, StringComparison.InvariantCultureIgnoreCase);
Assert.True(comparison);
}
/// <summary>
/// Tests the passing to an integer array
/// </summary>
@ -148,46 +79,5 @@ namespace ImageProcessor.UnitTests.Extensions
Assert.AreEqual(item.Value, result);
}
}
/// <summary>
/// Tests if the value is a valid URI path name. I.E the path part of a uri.
/// </summary>
/// <param name="input">The value to test</param>
/// <param name="expected">Whether the value is correct</param>
/// <remarks>
/// The full RFC3986 does not seem to pass the test with the square brackets
/// ':' is failing for some reason in VS but not elsewhere. Could be a build issue.
/// </remarks>
[Test]
[TestCase("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", true)]
[TestCase("-", true)]
[TestCase(".", true)]
[TestCase("_", true)]
[TestCase("~", true)]
[TestCase(":", true)]
[TestCase("/", true)]
[TestCase("?", true)]
[TestCase("#", false)]
[TestCase("[", false)]
[TestCase("]", false)]
[TestCase("@", true)]
[TestCase("!", true)]
[TestCase("$", true)]
[TestCase("&", true)]
[TestCase("'", true)]
[TestCase("(", true)]
[TestCase(")", true)]
[TestCase("*", true)]
[TestCase("+", true)]
[TestCase(",", true)]
[TestCase(";", true)]
[TestCase("=", true)]
[TestCase("lorem ipsum", false)]
[TestCase("é", false)]
public void TestIsValidUriPathName(string input, bool expected)
{
bool result = input.IsValidVirtualPathName();
Assert.AreEqual(expected, result);
}
}
}

98
src/ImageProcessor.Web.UnitTests/Extensions/StringExtensionsUnitTests.cs

@ -0,0 +1,98 @@
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="StringExtensionsUnitTests.cs" company="James South">
// Copyright (c) James South.
// Licensed under the Apache License, Version 2.0.
// </copyright>
// <summary>
// Test harness for the string extensions
// </summary>
// --------------------------------------------------------------------------------------------------------------------
namespace ImageProcessor.Web.UnitTests.Extensions
{
using System;
using ImageProcessor.Web.Extensions;
using NUnit.Framework;
/// <summary>
/// Test harness for the string extensions
/// </summary>
[TestFixture]
public class StringExtensionsUnitTests
{
/// <summary>
/// Tests the MD5 fingerprint
/// </summary>
/// <param name="input">The input value</param>
/// <param name="expected">The expected output of the hash</param>
[Test]
[TestCase("test input", "2e7f7a62eabf0993239ca17c78c464d9")]
[TestCase("lorem ipsum dolor", "96ee002fee25e8b675a477c9750fa360")]
[TestCase("LoReM IpSuM DoLoR", "41e201da794c7fbdb8ce5526a71c8c83")]
[TestCase("1234567890", "e15e31c3d8898c92ab172a4311be9e84")]
public void TestToMd5Fingerprint(string input, string expected)
{
string result = input.ToMD5Fingerprint();
bool comparison = result.Equals(expected, StringComparison.InvariantCultureIgnoreCase);
Assert.True(comparison);
}
/// <summary>
/// Tests the SHA-1 fingerprint
/// </summary>
/// <param name="input">The input value</param>
/// <param name="expected">The expected output of the hash</param>
[Test]
[TestCase("test input", "49883b34e5a0f48224dd6230f471e9dc1bdbeaf5")]
[TestCase("lorem ipsum dolor", "75899ad8827a32493928903aecd6e931bf36f967")]
[TestCase("LoReM IpSuM DoLoR", "2f44519afae72fc0837b72c6b53cb11338a1f916")]
[TestCase("1234567890", "01b307acba4f54f55aafc33bb06bbbf6ca803e9a")]
public void TestToSHA1Fingerprint(string input, string expected)
{
string result = input.ToSHA1Fingerprint();
bool comparison = result.Equals(expected, StringComparison.InvariantCultureIgnoreCase);
Assert.True(comparison);
}
/// <summary>
/// Tests if the value is a valid URI path name. I.E the path part of a uri.
/// </summary>
/// <param name="input">The value to test</param>
/// <param name="expected">Whether the value is correct</param>
/// <remarks>
/// The full RFC3986 does not seem to pass the test with the square brackets
/// ':' is failing for some reason in VS but not elsewhere. Could be a build issue.
/// </remarks>
[Test]
[TestCase("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", true)]
[TestCase("-", true)]
[TestCase(".", true)]
[TestCase("_", true)]
[TestCase("~", true)]
[TestCase(":", true)]
[TestCase("/", true)]
[TestCase("?", true)]
[TestCase("#", false)]
[TestCase("[", false)]
[TestCase("]", false)]
[TestCase("@", true)]
[TestCase("!", true)]
[TestCase("$", true)]
[TestCase("&", true)]
[TestCase("'", true)]
[TestCase("(", true)]
[TestCase(")", true)]
[TestCase("*", true)]
[TestCase("+", true)]
[TestCase(",", true)]
[TestCase(";", true)]
[TestCase("=", true)]
[TestCase("lorem ipsum", false)]
[TestCase("é", false)]
public void TestIsValidUriPathName(string input, bool expected)
{
bool result = input.IsValidVirtualPathName();
Assert.AreEqual(expected, result);
}
}
}

1
src/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj

@ -53,6 +53,7 @@
<Otherwise />
</Choose>
<ItemGroup>
<Compile Include="Extensions\StringExtensionsUnitTests.cs" />
<Compile Include="RegularExpressionUnitTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

5
src/ImageProcessor.Web/NET45/Configuration/ImageCacheSection.cs

@ -10,16 +10,13 @@
namespace ImageProcessor.Web.Configuration
{
#region Using
using System.Configuration;
using System.IO;
using System.Xml;
using ImageProcessor.Common.Extensions;
using ImageProcessor.Web.Extensions;
using ImageProcessor.Web.Helpers;
#endregion
/// <summary>
/// Represents an image cache section within a configuration file.
/// </summary>

143
src/ImageProcessor.Web/NET45/Extensions/StringExtensions.cs

@ -0,0 +1,143 @@
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="StringExtensions.cs" company="James South">
// Copyright (c) James South.
// Licensed under the Apache License, Version 2.0.
// </copyright>
// <summary>
// Encapsulates a series of time saving extension methods to the <see cref="T:System.String" /> class.
// </summary>
// --------------------------------------------------------------------------------------------------------------------
namespace ImageProcessor.Web.Extensions
{
using System;
using System.Globalization;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
/// <summary>
/// Encapsulates a series of time saving extension methods to the <see cref="T:System.String"/> class.
/// </summary>
public static class StringExtensions
{
#region Cryptography
/// <summary>
/// Creates an MD5 fingerprint of the String.
/// </summary>
/// <param name="expression">The <see cref="T:System.String">String</see> instance that this method extends.</param>
/// <returns>An MD5 fingerprint of the String.</returns>
public static string ToMD5Fingerprint(this string expression)
{
byte[] bytes = Encoding.Unicode.GetBytes(expression.ToCharArray());
using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
{
byte[] hash = md5.ComputeHash(bytes);
// Concatenate the hash bytes into one long String.
return hash.Aggregate(
new StringBuilder(32),
(sb, b) => sb.Append(b.ToString("X2", CultureInfo.InvariantCulture)))
.ToString().ToLowerInvariant();
}
}
/// <summary>
/// Creates an SHA1 fingerprint of the String.
/// </summary>
/// <param name="expression">The <see cref="T:System.String">String</see> instance that this method extends.</param>
/// <returns>An SHA1 fingerprint of the String.</returns>
public static string ToSHA1Fingerprint(this string expression)
{
byte[] bytes = Encoding.ASCII.GetBytes(expression.ToCharArray());
using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
byte[] hash = sha1.ComputeHash(bytes);
// Concatenate the hash bytes into one long String.
return hash.Aggregate(
new StringBuilder(40),
(sb, b) => sb.Append(b.ToString("X2", CultureInfo.InvariantCulture)))
.ToString().ToLowerInvariant();
}
}
#endregion
#region Numbers
/// <summary>
/// Creates an array of integers scraped from the String.
/// </summary>
/// <param name="expression">The <see cref="T:System.String">String</see> instance that this method extends.</param>
/// <returns>An array of integers scraped from the String.</returns>
public static int[] ToPositiveIntegerArray(this string expression)
{
if (string.IsNullOrWhiteSpace(expression))
{
throw new ArgumentNullException("expression");
}
Regex regex = new Regex(@"[\d+]+(?=[,-])|[\d+]+(?![,-])", RegexOptions.Compiled);
MatchCollection matchCollection = regex.Matches(expression);
// Get the collections.
int count = matchCollection.Count;
int[] matches = new int[count];
// Loop and parse the int values.
for (int i = 0; i < count; i++)
{
matches[i] = int.Parse(matchCollection[i].Value, CultureInfo.InvariantCulture);
}
return matches;
}
/// <summary>
/// Creates an array of floats scraped from the String.
/// </summary>
/// <param name="expression">The <see cref="T:System.String">String</see> instance that this method extends.</param>
/// <returns>An array of floats scraped from the String.</returns>
public static float[] ToPositiveFloatArray(this string expression)
{
if (string.IsNullOrWhiteSpace(expression))
{
throw new ArgumentNullException("expression");
}
Regex regex = new Regex(@"[\d+\.]+(?=[,-])|[\d+\.]+(?![,-])", RegexOptions.Compiled);
MatchCollection matchCollection = regex.Matches(expression);
// Get the collections.
int count = matchCollection.Count;
float[] matches = new float[count];
// Loop and parse the int values.
for (int i = 0; i < count; i++)
{
matches[i] = float.Parse(matchCollection[i].Value, CultureInfo.InvariantCulture);
}
return matches;
}
#endregion
#region Files and Paths
/// <summary>
/// Checks the string to see whether the value is a valid virtual path name.
/// </summary>
/// <param name="expression">The <see cref="T:System.String">String</see> instance that this method extends.</param>
/// <returns>True if the given string is a valid virtual path name</returns>
public static bool IsValidVirtualPathName(this string expression)
{
Uri uri;
return Uri.TryCreate(expression, UriKind.Relative, out uri) && uri.IsWellFormedOriginalString();
}
#endregion
}
}

2
src/ImageProcessor.Web/NET45/HttpModules/ImageProcessingModule.cs

@ -29,9 +29,9 @@ namespace ImageProcessor.Web.HttpModules
using System.Web.Hosting;
using System.Web.Security;
using ImageProcessor.Common.Extensions;
using ImageProcessor.Web.Caching;
using ImageProcessor.Web.Configuration;
using ImageProcessor.Web.Extensions;
using ImageProcessor.Web.Helpers;
#endregion

1
src/ImageProcessor.Web/NET45/ImageProcessor.Web_NET45.csproj

@ -54,6 +54,7 @@
<Compile Include="Configuration\ImageProcessorConfiguration.cs" />
<Compile Include="Configuration\ImageSecuritySection.cs" />
<Compile Include="Extensions\DirectoryInfoExtensions.cs" />
<Compile Include="Extensions\StringExtensions.cs" />
<Compile Include="Helpers\CommonParameterParserUtility.cs" />
<Compile Include="Helpers\NativeMethods.cs" />
<Compile Include="Helpers\ResourceHelpers.cs" />

13
src/ImageProcessor/Common/Extensions/AssemblyExtensions.cs

@ -1,4 +1,13 @@

// --------------------------------------------------------------------------------------------------------------------
// <copyright file="AssemblyExtensions.cs" company="James South">
// Copyright (c) James South.
// Licensed under the Apache License, Version 2.0.
// </copyright>
// <summary>
// Encapsulates a series of time saving extension methods to the <see cref="T:System.Reflection.Assembly" /> class.
// </summary>
// --------------------------------------------------------------------------------------------------------------------
namespace ImageProcessor.Common.Extensions
{
using System;
@ -38,4 +47,4 @@ namespace ImageProcessor.Common.Extensions
}
}
}
}
}

105
src/ImageProcessor/Common/Extensions/StringExtensions.cs

@ -12,9 +12,6 @@ namespace ImageProcessor.Common.Extensions
{
using System;
using System.Globalization;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
/// <summary>
@ -22,93 +19,6 @@ namespace ImageProcessor.Common.Extensions
/// </summary>
public static class StringExtensions
{
#region Cryptography
/// <summary>
/// Creates an MD5 fingerprint of the String.
/// </summary>
/// <param name="expression">The <see cref="T:System.String">String</see> instance that this method extends.</param>
/// <returns>An MD5 fingerprint of the String.</returns>
public static string ToMD5Fingerprint(this string expression)
{
byte[] bytes = Encoding.Unicode.GetBytes(expression.ToCharArray());
using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
{
byte[] hash = md5.ComputeHash(bytes);
// Concatenate the hash bytes into one long String.
return hash.Aggregate(
new StringBuilder(32),
(sb, b) => sb.Append(b.ToString("X2", CultureInfo.InvariantCulture)))
.ToString().ToLowerInvariant();
}
}
/// <summary>
/// Creates an SHA1 fingerprint of the String.
/// </summary>
/// <param name="expression">The <see cref="T:System.String">String</see> instance that this method extends.</param>
/// <returns>An SHA1 fingerprint of the String.</returns>
public static string ToSHA1Fingerprint(this string expression)
{
byte[] bytes = Encoding.ASCII.GetBytes(expression.ToCharArray());
using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
byte[] hash = sha1.ComputeHash(bytes);
// Concatenate the hash bytes into one long String.
return hash.Aggregate(
new StringBuilder(40),
(sb, b) => sb.Append(b.ToString("X2", CultureInfo.InvariantCulture)))
.ToString().ToLowerInvariant();
}
}
/// <summary>
/// Creates an SHA256 fingerprint of the String.
/// </summary>
/// <param name="expression">The <see cref="T:System.String">String</see> instance that this method extends.</param>
/// <returns>An SHA256 fingerprint of the String.</returns>
public static string ToSHA256Fingerprint(this string expression)
{
byte[] bytes = Encoding.ASCII.GetBytes(expression.ToCharArray());
using (SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider())
{
byte[] hash = sha256.ComputeHash(bytes);
// Concatenate the hash bytes into one long String.
return hash.Aggregate(
new StringBuilder(64),
(sb, b) => sb.Append(b.ToString("X2", CultureInfo.InvariantCulture)))
.ToString().ToLowerInvariant();
}
}
/// <summary>
/// Creates an SHA512 fingerprint of the String.
/// </summary>
/// <param name="expression">The <see cref="T:System.String">String</see> instance that this method extends.</param>
/// <returns>An SHA256 fingerprint of the String.</returns>
public static string ToSHA512Fingerprint(this string expression)
{
byte[] bytes = Encoding.ASCII.GetBytes(expression.ToCharArray());
using (SHA512CryptoServiceProvider sha512 = new SHA512CryptoServiceProvider())
{
byte[] hash = sha512.ComputeHash(bytes);
// Concatenate the hash bytes into one long String.
return hash.Aggregate(
new StringBuilder(70),
(sb, b) => sb.Append(b.ToString("X2", CultureInfo.InvariantCulture)))
.ToString().ToLowerInvariant();
}
}
#endregion
#region Numbers
/// <summary>
/// Creates an array of integers scraped from the String.
/// </summary>
@ -166,20 +76,5 @@ namespace ImageProcessor.Common.Extensions
return matches;
}
#endregion
#region Files and Paths
/// <summary>
/// Checks the string to see whether the value is a valid virtual path name.
/// </summary>
/// <param name="expression">The <see cref="T:System.String">String</see> instance that this method extends.</param>
/// <returns>True if the given string is a valid virtual path name</returns>
public static bool IsValidVirtualPathName(this string expression)
{
Uri uri;
return Uri.TryCreate(expression, UriKind.Relative, out uri) && uri.IsWellFormedOriginalString();
}
#endregion
}
}

22
src/ImageProcessor/Imaging/Formats/GifEncoder.cs

@ -298,20 +298,14 @@ namespace ImageProcessor.Imaging.Formats
this.WriteByte(0); // Pixel aspect ratio
this.WriteColorTable(sourceGif);
// The different browsers interpret the spec differently when adding a loop.
// If the loop count is one IE and FF &lt; 3 (incorrectly) loop an extra number of times.
// Removing the Netscape header should fix this.
if (count > -1 && count != 1)
{
// Application Extension Header
this.WriteShort(ApplicationExtensionBlockIdentifier);
this.WriteByte(ApplicationBlockSize);
this.WriteString(ApplicationIdentification);
this.WriteByte(3); // Application block length
this.WriteByte(1);
this.WriteShort(count); // Repeat count for images.
this.WriteByte(0); // Terminator
}
// Application Extension Header
this.WriteShort(ApplicationExtensionBlockIdentifier);
this.WriteByte(ApplicationBlockSize);
this.WriteString(ApplicationIdentification);
this.WriteByte(3); // Application block length
this.WriteByte(1);
this.WriteShort(count); // Repeat count for images.
this.WriteByte(0); // Terminator
}
/// <summary>

2
src/ImageProcessor/Imaging/Formats/JpegFormat.cs

@ -75,7 +75,7 @@ namespace ImageProcessor.Imaging.Formats
{
base.ApplyProcessor(processor, factory);
// Set the property item information from any Exif metadata.
// Set the property item information from any Exif metadata.
// We do this here so that they can be changed between processor methods.
if (factory.PreserveExifData)
{

6
src/ImageProcessor/Imaging/Formats/NativeMethods.cs

@ -18,6 +18,12 @@ namespace ImageProcessor.Imaging.Formats
/// </summary>
internal static class NativeMethods
{
/// <summary>
/// Whether the process is running in 64bit mode. Used for calling the correct dllimport method.
/// Clunky I know but I couldn't get dynamic methods to work.
/// </summary>
private static readonly bool Is64Bit = Environment.Is64BitProcess;
#region WebP
/// <summary>
/// Validate the WebP image header and retrieve the image height and width. Pointers *width and *height can be passed NULL if deemed irrelevant

1
src/ImageProcessor/Settings.StyleCop

@ -4,6 +4,7 @@
<Value>bitstream</Value>
<Value>dd</Value>
<Value>ddd</Value>
<Value>dllimport</Value>
<Value>gps</Value>
<Value>mmmm</Value>
<Value>orig</Value>

Loading…
Cancel
Save