Comments (8)
For more details, I also found an issue in generated code for one-of fields. First for a better vision, when a non one-of field is getting decoded it passes its current value to the decoder as an inout parameter. Like this:
case 11: try { try decoder.decodeSingularFloatField(value: &_storage._singularFloat) }()
But in one of fields it happens completely different. It's a sample of code that generated for decoding a one-of field:
case 71: try {
var v: Float?
try decoder.decodeSingularFloatField(value: &v)
if let v = v {
if _storage._o != nil {try decoder.handleConflictingOneOf()}
_storage._o = .oneofFloat(v)
}
}()
In the above code the inout parameter that is passing to decode method is always nil (v variable is never set before passing to decoder method). My suggestion would be to add a line of code setting the current value to variable if it's possible:
case 71: try {
var v: Float?
if case .oneofFloat(let _v)? = _storage._o {v = _v} // add this line
try decoder.decodeSingularFloatField(value: &v)
if let v = v {
if _storage._o != nil {try decoder.handleConflictingOneOf()}
_storage._o = .oneofFloat(v)
}
}()
from swift-protobuf.
We should probably look at some of the upstream binary tests to see if they have some good example of merging tests that we should bring over, would help make sure we catch these types of issues.
from swift-protobuf.
We'll need to give this some more thought, but for primitive fields, the fact that we pass nil
might not matter, yes it could be a single to the decoder the value was set, but for we also have the handleConflictingOneOf
callback for that. The pace we really need to pass it is where merge would be adding instead of replacing, so sub message, maps?, and probably repeated fields. So it might make sense to only do the fetch in those cases to keep the code sizes down.
from swift-protobuf.
I'm not sure we are on the same page, but let me explain a scenario for it:
Let's say we have a message (m1) with oneof field and we try to merge it with another message (m2) with the same type. The oneof type has two possible cases oneof_int32(int32)
and oneof_int64(int64)
. If we merge m1 with m2 by a field mask of both oneof_int32
and oneof_int64
paths, we expect that m1 oneof field should be same as m2. But currently, since merge decoder can't get value of oneof paths, it becomes nil.
from swift-protobuf.
Ah, that's potentially a different problem then I was thinking of, I was thinking purely about the nested messages within the oneof, and if the same oneof field is set, a merge wouldn't combine the submessage like it would for a non oneof field. Yea, I guess for collection of the field being set, we might need to always provide the value.
Anyway, all the more reason for the addition of merging related tests not just specific to the field mask cases.
from swift-protobuf.
I guess reproducing and fixing of this bug would be easier in case #1505 get merged first
from swift-protobuf.
Generally, fixing this seems worthwhile independent of that PR. Just need someone to code up some test cases and the fixes.
from swift-protobuf.
I close this issue as I commented in #1632 my problem fixed without any additional code generation.
from swift-protobuf.
Related Issues (20)
- xcprivacy file for this package HOT 12
- WebAssembly build failure in AsyncMessageSequence HOT 1
- unknownFields prevents messages from being copied by memcpy HOT 6
- New concurrency warnings when building with Swift 5.10 HOT 29
- Revisit `_NameMap` in light of Swift 5 changing the default `String` encoding HOT 1
- 2 .proto has the same message names, which is why the project is not going to be built HOT 1
- Package Resolution Failed in Xcode 15.3 HOT 1
- Can I use SwiftProtobufPluginLibrary or SwiftProtobuf as a Protobuf-parser in Swift project? HOT 1
- The "thread" sanitizer testing is failing HOT 8
- The fuzz regression tests seem to have stopped working. HOT 2
- Need to Add a Privacy Manifest for Apple Validation store for sprint 2024 HOT 1
- Add a PrivacyInfo file HOT 1
- TextFormat seems like it might not be to spec for "inf", "infinity", or "nan" HOT 2
- PR approved back in July 2022 and changes still not included in a release HOT 7
- Unable to verify code signature when installing app to iOS from XCode HOT 4
- Serialization is not generated HOT 8
- Support for Protobuf Editions HOT 2
- Un-revert breaking changes before releasing v2
- Consider support for newer concepts like `BitwiseCopyable` HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from swift-protobuf.