Constructing a commitment scheme from two (possibly defective) commitment schemes
It's been over a month, and so if this was a homework question, the due data has already passed.


Both Com1 and Com2 satisfy the binding property, and one of them satisfies the hiding property (but you do not know which). In this case I do not think we could create a good commitment scheme.


Sure you can; you just do:
$$Com(m, r_1, r_2, r_3) = Com1( m \oplus r_3, r_1 ) || Com2( r_3, r_2 )$$
If Com1 does not have the hiding property, someone can learn the value $m \oplus r_3$, however if $r_3$ is selected randomly, they learn nothing about $m$.  Similarly, if Com2 does not have the hiding property, they can learn the value of $r_3$; again, they learn nothing about $m$.
The other piece we need to show is that $Com$ also has the binding property; that is straightforward with the assumption that both $Com1$ and $Com2$ do; $Com1( m \oplus r_3, r_1 )$ can be opened only as $m \oplus r_3$, and $Com( r_3, r_2 )$ can be opened only as $r_3$, and the xor of the two will have to be the original committed string $m$.