github-code-scanning[bot] commented on code in PR #2439:
URL: https://github.com/apache/avro/pull/2439#discussion_r1293668358
##########
lang/csharp/src/apache/main/Specific/SpecificReader.cs:
##########
@@ -130,20 +130,22 @@
}
}
- var defaultStream = new MemoryStream();
- var defaultEncoder = new BinaryEncoder(defaultStream);
- var defaultDecoder = new BinaryDecoder(defaultStream);
- foreach (Field rf in rs)
+ using (var defaultStream = new MemoryStream())
{
- if (writerSchema.Contains(rf.Name)) continue;
+ var defaultEncoder = new BinaryEncoder(defaultStream);
+ var defaultDecoder = new BinaryDecoder(defaultStream);
+ foreach (Field rf in rs)
+ {
+ if (writerSchema.Contains(rf.Name)) continue;
- defaultStream.Position = 0; // reset for writing
- Resolver.EncodeDefaultValue(defaultEncoder, rf.Schema,
rf.DefaultValue);
- defaultStream.Flush();
- defaultStream.Position = 0; // reset for reading
+ defaultStream.Position = 0; // reset for writing
+ Resolver.EncodeDefaultValue(defaultEncoder, rf.Schema,
rf.DefaultValue);
+ defaultStream.Flush();
+ defaultStream.Position = 0; // reset for reading
- obj = rec.Get(rf.Pos);
- rec.Put(rf.Pos, Read(obj, rf.Schema, rf.Schema,
defaultDecoder));
+ obj = rec.Get(rf.Pos);
+ rec.Put(rf.Pos, Read(obj, rf.Schema, rf.Schema,
defaultDecoder));
+ }
Review Comment:
## Missed opportunity to use Where
This foreach loop [implicitly filters its target sequence](1) - consider
filtering the sequence explicitly using '.Where(...)'.
[Show more
details](https://github.com/apache/avro/security/code-scanning/3105)
##########
lang/csharp/src/apache/main/Specific/SpecificReader.cs:
##########
@@ -130,20 +130,22 @@
}
}
- var defaultStream = new MemoryStream();
- var defaultEncoder = new BinaryEncoder(defaultStream);
- var defaultDecoder = new BinaryDecoder(defaultStream);
- foreach (Field rf in rs)
+ using (var defaultStream = new MemoryStream())
{
- if (writerSchema.Contains(rf.Name)) continue;
+ var defaultEncoder = new BinaryEncoder(defaultStream);
+ var defaultDecoder = new BinaryDecoder(defaultStream);
+ foreach (Field rf in rs)
+ {
+ if (writerSchema.Contains(rf.Name)) continue;
- defaultStream.Position = 0; // reset for writing
- Resolver.EncodeDefaultValue(defaultEncoder, rf.Schema,
rf.DefaultValue);
- defaultStream.Flush();
- defaultStream.Position = 0; // reset for reading
+ defaultStream.Position = 0; // reset for writing
+ Resolver.EncodeDefaultValue(defaultEncoder, rf.Schema,
rf.DefaultValue);
+ defaultStream.Flush();
+ defaultStream.Position = 0; // reset for reading
- obj = rec.Get(rf.Pos);
- rec.Put(rf.Pos, Read(obj, rf.Schema, rf.Schema,
defaultDecoder));
+ obj = rec.Get(rf.Pos);
Review Comment:
## Dereferenced variable may be null
Variable [rec](1) may be null at this access because of [this](2) assignment.
[Show more
details](https://github.com/apache/avro/security/code-scanning/3104)
##########
lang/csharp/src/apache/test/File/FileTests.cs:
##########
@@ -668,6 +668,55 @@
}
}
+ [Test]
+ public void TestDeflateReadMemoryUsage([Values(specificSchema)] string
schemaStr)
+ {
+ // create and write out
+ IList<Foo> records = MakeRecords(GetTestFooObject());
+
+ Process currentProcess = Process.GetCurrentProcess();
+
+ MemoryStream dataFileOutputStream = new MemoryStream();
+
+ Schema schema = Schema.Parse(schemaStr);
+ DatumWriter<Foo> writer = new SpecificWriter<Foo>(schema);
+ using (IFileWriter<Foo> dataFileWriter =
DataFileWriter<Foo>.OpenWriter(writer, dataFileOutputStream,
Codec.CreateCodec(Codec.Type.Deflate)))
+ {
+ for (int i = 0; i < 10; ++i)
+ {
+ foreach (Foo foo in records)
+ {
+ dataFileWriter.Append(foo);
+ }
+
+ // write out block
+ if (i == 1 || i == 4)
+ {
+ dataFileWriter.Sync();
+ }
+ }
+ }
+
+ long startMemoryUsedBytes = currentProcess.WorkingSet64;
+
+ MemoryStream dataFileInputStream = new
MemoryStream(dataFileOutputStream.ToArray());
+ dataFileInputStream.Position = 0;
+
+ // read back
+ IList<Foo> readRecords = new List<Foo>();
Review Comment:
## Container contents are never accessed
The contents of this container are never accessed.
[Show more
details](https://github.com/apache/avro/security/code-scanning/3107)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]